{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ">### 🚩 *Create a free WhyLabs account to get more value out of whylogs!*<br> \n",
    ">*Did you know you can store, visualize, and monitor language model profiles with the [WhyLabs Observability Platform](https://whylabs.ai/whylogs-free-signup?utm_source=github&utm_medium=referral&utm_campaign=langkit_behavior_monitoring)? Sign up for a [free WhyLabs account](https://whylabs.ai/whylogs-free-signup?utm_source=github&utm_medium=referral&utm_campaign=langkit_behavior_monitoring) to leverage the power of LangKit and WhyLabs together!*\n",
    "\n",
    "# Behavioral Monitoring of Large Language Models\n",
    "\n",
    "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/whylabs/langkit/blob/main/langkit/examples/ChatGPT_Behavioral_Monitoring.ipynb)\n",
    "\n",
    "> This notebook is a complement to the blog post [Behavioral Monitoring of Large Language Models](placeholder). Please refer to the blog post for additional context.\n",
    "\n",
    "In this blog, we will  discuss seven groups of metrics you can use to keep track of the LLM’s behavior. We will calculate these metrics for chatGPT’s responses for a fixed set of 200 prompts across 35 days  and track how chatGPT’s behavior evolves within the period. Our focus task will be long-form question answering, and we will use LangKit, whylogs and WhyLabs to calculate, track and monitor the model’s behavior across time.\n",
    "\n",
    "You can check the resulting dashboard for this project at [WhyLabs](https://hub.whylabsapp.com/resources/demo-chatgpt-behavior-ELI5/columns/response.difficult_words?dateRange=2023-03-05-to-2023-04-09&targetOrgId=demo&sessionToken=session-8gcsnbVy) (no sign-in required)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Task - Explain Like I’m 5\n",
    "\n",
    "For this example, let’s use the [Explain Like I’m Five (ELI5) dataset](https://aclanthology.org/P19-1346), a question-answering dataset built from the Reddit forum “Explain Like I’m Five”. The questions are open-ended - questions that require a longer response and cannot be answered with a “yes” or “no” - and the answers should be simple enough so that a five-year-old would understand.\n",
    "\n",
    "In the work presented in [ChatLog: Recording and Analyzing ChatGPT Across Time](https://arxiv.org/pdf/2304.14106.pdf), 1000 questions were sampled from this dataset and repeatedly sent to ChatGPT every day from March 5 to April 9, 2023, which is available in [ChatLog’s Repository](https://github.com/THU-KEG/ChatLog). We’ll make use of this dataset by sampling 200 out of the original 1000 questions, along with ChatGPT’s answers and human reference answers, for each day of the given period. That way, we’ll end up with 35 daily dataframes, each containing 200 rows.\n",
    "\n",
    "For this example, we already have the dataframes for each day, so we can simply download from our S3 Examples folder. Let's take a look at the first dataframe:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>prompt</th>\n",
       "      <th>response</th>\n",
       "      <th>ref_0</th>\n",
       "      <th>ref_1</th>\n",
       "      <th>ref_2</th>\n",
       "      <th>chat_date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>Why is every book I hear about a \" NY Times # ...</td>\n",
       "      <td>\\n\\nThe New York Times is a BIG newspaper that...</td>\n",
       "      <td>Basically there are many categories of \" Best ...</td>\n",
       "      <td>If you 're hearing about it , it 's because it...</td>\n",
       "      <td>One reason is lots of catagories . However , h...</td>\n",
       "      <td>2023-03-05 00:00:00+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>If salt is so bad for cars , why do we use it ...</td>\n",
       "      <td>\\n\\nWell, imagine you and your friends made a ...</td>\n",
       "      <td>salt is good for not dying in car crashes and ...</td>\n",
       "      <td>In Minnesota and North Dakota , they tend to u...</td>\n",
       "      <td>Used to work in the salt industry ( yes , it '...</td>\n",
       "      <td>2023-03-05 00:00:00+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>Why do we still have SD TV channels when HD lo...</td>\n",
       "      <td>\\n\\nSure thing! Imagine that TV channels are l...</td>\n",
       "      <td>The way it works is that old TV stations got a...</td>\n",
       "      <td>HD does n't look like anything at all on an SD...</td>\n",
       "      <td>There are a few reasons why SD channels still ...</td>\n",
       "      <td>2023-03-05 00:00:00+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>Why has nobody assassinated Kim Jong - un He i...</td>\n",
       "      <td>\\n\\nIt's never okay to hurt or harm other peop...</td>\n",
       "      <td>You ca n't just go around assassinating the le...</td>\n",
       "      <td>It would n't really do any good . It 's not li...</td>\n",
       "      <td>Partly because any country found to be doing s...</td>\n",
       "      <td>2023-03-05 00:00:00+00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>How was airplane technology able to advance so...</td>\n",
       "      <td>\\n\\nAfter the Wright Brothers made their first...</td>\n",
       "      <td>Wanting to kill the shit out of Germans drives...</td>\n",
       "      <td>This is a frequent phenomenon with technology ...</td>\n",
       "      <td>The importance of the Wright Brothers and othe...</td>\n",
       "      <td>2023-03-05 00:00:00+00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                             prompt  \\\n",
       "0   1  Why is every book I hear about a \" NY Times # ...   \n",
       "1   2  If salt is so bad for cars , why do we use it ...   \n",
       "2   3  Why do we still have SD TV channels when HD lo...   \n",
       "3   4  Why has nobody assassinated Kim Jong - un He i...   \n",
       "4   5  How was airplane technology able to advance so...   \n",
       "\n",
       "                                            response  \\\n",
       "0  \\n\\nThe New York Times is a BIG newspaper that...   \n",
       "1  \\n\\nWell, imagine you and your friends made a ...   \n",
       "2  \\n\\nSure thing! Imagine that TV channels are l...   \n",
       "3  \\n\\nIt's never okay to hurt or harm other peop...   \n",
       "4  \\n\\nAfter the Wright Brothers made their first...   \n",
       "\n",
       "                                               ref_0  \\\n",
       "0  Basically there are many categories of \" Best ...   \n",
       "1  salt is good for not dying in car crashes and ...   \n",
       "2  The way it works is that old TV stations got a...   \n",
       "3  You ca n't just go around assassinating the le...   \n",
       "4  Wanting to kill the shit out of Germans drives...   \n",
       "\n",
       "                                               ref_1  \\\n",
       "0  If you 're hearing about it , it 's because it...   \n",
       "1  In Minnesota and North Dakota , they tend to u...   \n",
       "2  HD does n't look like anything at all on an SD...   \n",
       "3  It would n't really do any good . It 's not li...   \n",
       "4  This is a frequent phenomenon with technology ...   \n",
       "\n",
       "                                               ref_2  \\\n",
       "0  One reason is lots of catagories . However , h...   \n",
       "1  Used to work in the salt industry ( yes , it '...   \n",
       "2  There are a few reasons why SD channels still ...   \n",
       "3  Partly because any country found to be doing s...   \n",
       "4  The importance of the Wright Brothers and othe...   \n",
       "\n",
       "                   chat_date  \n",
       "0  2023-03-05 00:00:00+00:00  \n",
       "1  2023-03-05 00:00:00+00:00  \n",
       "2  2023-03-05 00:00:00+00:00  \n",
       "3  2023-03-05 00:00:00+00:00  \n",
       "4  2023-03-05 00:00:00+00:00  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import datetime\n",
    "\n",
    "date = datetime.datetime(2023,3,5)\n",
    "base_url = \"https://whylabs-public.s3.us-west-2.amazonaws.com/langkit-examples/behavior-llm/\"\n",
    "date_str = date.strftime(\"%Y-%m-%d\")\n",
    "df = pd.read_csv(f\"{base_url}daily_{date_str}.csv\")\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Prompt: ELI5 question asked to the model.\n",
    "- Response: ChatGPT’s response to the prompt.\n",
    "- Ref_0: Human reference answer 1.\n",
    "- Ref_1: Human reference answer 2.\n",
    "- Ref_2: Human reference answer 3.\n",
    "- chat_date: Date when the prompt was sent to ChatGPT."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculating the Metrics\n",
    "\n",
    "It can be a daunting task to define a set of metrics to properly evaluate a model with such a wide range of capabilities as ChatGPT. In this example, we’ll cover some examples of metrics that are relatively general, and that could be useful for a range of applications, such as text quality, sentiment analysis, toxicity, and text semantic similarity, and others that are particular for certain tasks, such as question answering and summarization, like the ROUGE group of metrics.\n",
    "\n",
    "There are a multitude of other metrics that might be more relevant to track, depending on the particular application you are interested in. If you’re looking for more examples of what to monitor, here are two papers that served as an inspiration for the writing of this blog: [Holistic Evaluation of Language Models](https://arxiv.org/pdf/2211.09110.pdf) and [ChatLog: Recording and Analyzing ChatGPT Across Time](https://arxiv.org/pdf/2304.14106.pdf).\n",
    "\n",
    "Now, let’s talk about the metrics we’re monitoring in this example. Most of the metrics will be calculated with the help of external libraries, such as [rouge](https://pypi.org/project/rouge/), [textstat](https://github.com/textstat/textstat), and [huggingface models](https://huggingface.co/models), and most of them are encapsulated in the LangKit library. In the end, we want to group all the calculated metrics in a [whylogs](https://github.com/whylabs/whylogs) profile, which is a statistical summary of the original data. We will then send the daily profiles to the WhyLabs observability platform, where we can monitor them over time.\n",
    "\n",
    "Let's see how to calculate each of the metrics in a single dataframe for the first day. Once we show how to do it for one day, we will repeat for all 35 days and send the resulting profiles to WhyLabs.\n",
    "\n",
    "### Installing the libraries\n",
    "\n",
    "Let's first install the required libraries for this example:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Note: you may need to restart the kernel to use updated packages.\n",
    "%pip install -q langkit[all] whylogs[viz] rouge"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Rouge\n",
    "\n",
    "Recall-Oriented Understudy for Gisting Evaluation (ROUGE) is a set of metrics commonly used in natural language processing and computational linguistics to evaluate the quality of automatic summaries. The ROUGE metrics are designed to compare an automatically generated summary with one or more reference summaries.\n",
    "\n",
    " The task at hand is a question-answering problem rather than a summarization task, but we do have human answers as a reference, so we will use the ROUGE metrics to measure the similarity between the ChatGPT response and each of the three reference answers. We will use the rouge python library to augment our dataframe with two different metrics: Rouge-L, which takes into account the longest sequence overlap between the answers, and Rouge-2, which takes into account the overlap of bigrams between the answers. For each generated answer, the final scores will be defined according to the maximum score across the 3 reference answers, based on the f-score of Rouge-L. For both Rouge-L and Rouge-2, we’ll calculate the f-score, precision, and recall, leading to the creation of 6 additional columns.\n",
    "\n",
    "This approach was based on the following paper: [ChatLog: Recording and Analyzing ChatGPT Across Time](https://arxiv.org/pdf/2304.14106.pdf)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from rouge import Rouge\n",
    "from nltk import PorterStemmer\n",
    "stemmer = PorterStemmer()\n",
    "\n",
    "def rouge_scores_as_cols(df,scores):\n",
    "    df[\"rouge-l-f\"] = [i[\"rouge-l\"][\"f\"] for i in scores]\n",
    "    df[\"rouge-l-p\"] = [i[\"rouge-l\"][\"p\"] for i in scores]\n",
    "    df[\"rouge-l-r\"] = [i[\"rouge-l\"][\"r\"] for i in scores]\n",
    "    df[\"rouge-2-f\"] = [i[\"rouge-2\"][\"f\"] for i in scores]\n",
    "    df[\"rouge-2-p\"] = [i[\"rouge-2\"][\"p\"] for i in scores]\n",
    "    df[\"rouge-2-r\"] = [i[\"rouge-2\"][\"r\"] for i in scores]\n",
    "\n",
    "    return df\n",
    "\n",
    "\n",
    "def rouge_calculation(df, target_col=\"response\", reference_cols = [\"ref_0\",\"ref_1\",\"ref_2\"]):\n",
    "    \"\"\"\n",
    "    Calculate rouge scores for a dataframe with a target column and reference columns.\n",
    "    For each row, the resulting metric will be the maximum rouge score across all references,\n",
    "    based on rouge-l-f.\n",
    "\n",
    "    :param df: dataframe with target and reference columns\n",
    "    :param target_col: target column name\n",
    "    :param reference_cols: reference column names\n",
    "    :return: dataframe with rouge scores as columns: rouge-l-f, rouge-l-p, rouge-l-r, rouge-2-f, rouge-2-p, rouge-2-r\n",
    "\n",
    "    Based on https://github.com/THU-KEG/ChatLog/blob/baf4f3e5249a84986f99d64b4dc8e5490c16c691/data/evaluation.py#L19\n",
    "\n",
    "    \n",
    "    \"\"\"\n",
    "    hypotheses = df[target_col].tolist()\n",
    "    references = df[reference_cols].values.tolist()\n",
    "    assert (len(hypotheses) == len(references))\n",
    "    hypoth = [\" \".join([stemmer.stem(i) for i in line.split()]) for line in hypotheses]\n",
    "    max_scores = []\n",
    "    for i, hyp in enumerate(hypoth):\n",
    "        refs = [\" \".join([stemmer.stem(i) for i in line.split()]) for line in references[i]]\n",
    "        hyps = [hyp] * len(refs)\n",
    "        rouge = Rouge()\n",
    "        scores = rouge.get_scores(hyps, refs, avg=False)\n",
    "        scores_sorted = sorted(scores, key=lambda kv: kv[\"rouge-l\"][\"f\"], reverse=True)\n",
    "        max_scores.append(scores_sorted[0])\n",
    "    df = rouge_scores_as_cols(df,max_scores)\n",
    "    return df\n",
    "\n",
    "df = rouge_calculation(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bias - Gender Total Variation Distance\n",
    "\n",
    "Social bias is a central topic of discussion when it comes to fair and responsible AI. In this example, we’re focusing on gender bias by measuring how uneven the mentions are between male and female demographics, to identify under and over representation.\n",
    "\n",
    "We will do so by counting the number of words that are included in both sets of words that are attributed to the female and male demographics. For a given day, we will sum the number of occurrences across the 200 generated answers, and compare the resulting distribution to a reference, unbiased distribution by calculating the distance between them, using [total variation distance](https://en.wikipedia.org/wiki/Total_variation_distance_of_probability_measures). \n",
    "\n",
    "This approach was based on the following paper: [Holistic Evaluation of Language Models](https://arxiv.org/pdf/2211.09110.pdf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.09999999999999998"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def total_variation_distance(p, q):\n",
    "    tvd = 0.5 * abs(p[0] - q[0]) + 0.5 * abs(p[1] - q[1])\n",
    "    return tvd\n",
    "\n",
    "Afemale = { \"she\", \"daughter\", \"hers\", \"her\", \"mother\", \"woman\", \"girl\", \"herself\", \"female\", \"sister\",\n",
    "\"daughters\", \"mothers\", \"women\", \"girls\", \"femen\", \"sisters\", \"aunt\", \"aunts\", \"niece\", \"nieces\" }\n",
    "Amale = { \"he\", \"son\", \"his\", \"him\", \"father\", \"man\", \"boy\", \"himself\", \"male\", \"brother\", \"sons\", \"fathers\",\n",
    "\"men\", \"boys\", \"males\", \"brothers\", \"uncle\", \"uncles\", \"nephew\", \"nephews\" }\n",
    "\n",
    "def calc_gender_counts(text):\n",
    "    female_count = 0\n",
    "    male_count = 0\n",
    "    for word in text.split():\n",
    "        if word in Afemale:\n",
    "            female_count+=1\n",
    "        if word in Amale:\n",
    "            male_count+=1\n",
    "    return [male_count,female_count]\n",
    "\n",
    "def normalize_counts(counts):\n",
    "    total = counts[0] + counts[1]\n",
    "    return [counts[0]/total, counts[1]/total]\n",
    "\n",
    "def calc_gender_bias(df, target_col=\"response\"):\n",
    "    ref = [0.5,0.5]\n",
    "    counts = [0,0]\n",
    "    # iterate df\n",
    "    for index, row in df.iterrows():\n",
    "        row_counts = calc_gender_counts(row[target_col])\n",
    "        counts[0] += row_counts[0]\n",
    "        counts[1] += row_counts[1]\n",
    "    normalized_counts = normalize_counts(counts)\n",
    "    return total_variation_distance(normalized_counts,ref)\n",
    "\n",
    "tvd_score = calc_gender_bias(df)\n",
    "tvd_score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Langkit Default Metrics\n",
    "\n",
    "Let's calculate some metrics using the default modules in Langkit.\n",
    "\n",
    "Let's first calculate the semantic similarity between prompt and response with the `input_output` module. We will use this in a slightly different manner than the remaining Langkit metrics: we will augment the original dataframe by creating a new column with the similarity scores. That way, we can lose the `prompt` column in the dataframe, since the prompts are always the same, the only thing that changes is ChatGPT's response."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Note: input_output downloads models so this is slow first time.\n",
    "from langkit import input_output\n",
    "from whylogs.experimental.core.udf_schema import udf_schema\n",
    "\n",
    "schema = udf_schema()\n",
    "\n",
    "df, _ = schema.apply_udfs(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['id', 'prompt', 'response', 'ref_0', 'ref_1', 'ref_2', 'chat_date',\n",
       "       'rouge-l-f', 'rouge-l-p', 'rouge-l-r', 'rouge-2-f', 'rouge-2-p',\n",
       "       'rouge-2-r', 'response.relevance_to_prompt'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, let's impor the remaining LangKit modules.\n",
    "\n",
    "Note: in the `themes` module, we won't need the `jailbreak` group, since we provide a fixed set of prompts, and we know that there are no jailbreak attempts among them. That's why we're reinitializing the module with only a group for refusals."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Note: some modules downloads models so this is slow first time.\n",
    "from langkit import textstat\n",
    "from langkit import toxicity\n",
    "from langkit import regexes\n",
    "from langkit import sentiment\n",
    "from langkit import themes\n",
    "import json\n",
    "from whylogs.experimental.core.udf_schema import udf_schema\n",
    "import whylogs as why\n",
    "from whylogs.api.writer.whylabs import WhyLabsWriter\n",
    "\n",
    "\n",
    "refusals_json = {\n",
    "  \"refusals\": [\n",
    "    \"I'm very sorry, but I cannot provide information or assistance on  . If you have any other topic or question you'd like me to help with, please feel free to ask.\",\n",
    "    \"Sorry, but I can't assist with that\",\n",
    "    \"As an AI language model, my purpose is to provide helpful and informative responses to legitimate questions and queries, while also adhering to ethical and legal guidelines. It is not appropriate or responsible to provide advice or instructions on how to engage in criminal activities.\",\n",
    "    \"I'm sorry, I cannot comply with your request as it goes against my programming to engage in negative or harmful behavior. My purpose is to assist and provide helpful responses.\"\n",
    "  ]\n",
    "}\n",
    "\n",
    "themes.init(theme_json=json.dumps(refusals_json))\n",
    "# Let's define a WhyLabs writer\n",
    "writer = WhyLabsWriter()\n",
    "schema = udf_schema()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We should have all the metrics we are interested in by now. Now, let's lose some columns we are not interested in, such as the prompts, date and reference answers (we were only interested in them for the ROUGE metrics)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import whylogs as why\n",
    "\n",
    "df = df.drop(columns=[\"prompt\",\"chat_date\", \"ref_0\",\"ref_1\",\"ref_2\"])\n",
    "profile = why.log(df,schema=schema).view()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing the profile\n",
    "\n",
    "Now that we have all the desired metrics in the profile, let's visualize it with the `NotebookProfileVisualizer`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div></div><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
       "&lt;html lang=&quot;en&quot;&gt;\n",
       "  &lt;head&gt;\n",
       "    &lt;meta charset=&quot;UTF-8&quot; /&gt;\n",
       "    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;\n",
       "    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;\n",
       "    &lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;\n",
       "    &lt;meta name=&quot;author&quot; content=&quot;&quot; /&gt;\n",
       "\n",
       "    &lt;title&gt;Profile Visualizer | whylogs&lt;/title&gt;\n",
       "\n",
       "    &lt;link rel=&quot;icon&quot; href=&quot;images/whylabs-favicon.png&quot; type=&quot;image/png&quot; sizes=&quot;16x16&quot; /&gt;\n",
       "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;\n",
       "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin /&gt;\n",
       "    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Asap:wght@400;500;600;700&amp;display=swap&quot; rel=&quot;stylesheet&quot; /&gt;\n",
       "    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; /&gt;\n",
       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css&quot; /&gt;\n",
       "\n",
       "    &lt;script\n",
       "      src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.7.7/handlebars.min.js&quot;\n",
       "      integrity=&quot;sha512-RNLkV3d+aLtfcpEyFG8jRbnWHxUqVZozacROI4J2F1sTaDqo1dPQYs01OMi1t1w9Y2FdbSCDSQ2ZVdAC8bzgAg==&quot;\n",
       "      crossorigin=&quot;anonymous&quot;\n",
       "      referrerpolicy=&quot;no-referrer&quot;\n",
       "    &gt;&lt;/script&gt;\n",
       "\n",
       "    &lt;style type=&quot;text/css&quot;&gt;\n",
       "      :root {\n",
       "        /* CONSTANTS */\n",
       "        --SIDE-PANEL-WIDTH: 320px;\n",
       "        --PROPERTY-PANEL-WIDTH: 420px;\n",
       "\n",
       "        /* COLOR VARIABLES */\n",
       "        /** Standard colors */\n",
       "        --red: #d11010;\n",
       "        --orange: #f07028;\n",
       "        --yellow: #faaf40;\n",
       "        --olive: #b5cc18;\n",
       "        --green: #1dbb42;\n",
       "        --teal: #00b5ad;\n",
       "        --blue: #2683c9;\n",
       "        --violet: #6435c9;\n",
       "        --purple: #a333c8;\n",
       "        --pink: #ed45a4;\n",
       "        --brown: #ac724d;\n",
       "        --grey: #778183;\n",
       "        --black: #1b1c1d;\n",
       "        --white: #ffffff;\n",
       "\n",
       "        /** Branded colors */\n",
       "        --brandPrimary900: #0e7384;\n",
       "        --brandPrimary800: #228798;\n",
       "        --brandPrimary700: #369bac;\n",
       "        --brandPrimary600: #4aafc0;\n",
       "        --brandPrimary500: #5ec3d4;\n",
       "        --brandPrimary400: #72d7e8;\n",
       "        --brandPrimary300: #86ebfc;\n",
       "        --brandPrimary200: #a6f2ff;\n",
       "        --brandPrimary100: #cdf8ff;\n",
       "        --brandSecondary900: #4f595b;\n",
       "        --brandSecondary800: #636d6f;\n",
       "        --brandSecondary700: #778183;\n",
       "        --brandSecondary600: #8b9597;\n",
       "        --brandSecondary500: #9fa9ab;\n",
       "        --brandSecondary400: #b3bdbf;\n",
       "        --brandSecondary300: #c7d1d3;\n",
       "        --brandSecondary200: #dbe5e7;\n",
       "        --brandSecondary100: #ebf2f3;\n",
       "        --secondaryLight1000: #313b3d;\n",
       "        --brandRed4: #b30000;\n",
       "        --brandRed3: #d72424;\n",
       "        --brandRed2: #eb5656;\n",
       "        --brandRed1: #ff8282;\n",
       "        --night1: #021826;\n",
       "        /** Purpose colors */\n",
       "        --textColor: #4f595b;\n",
       "        --linkColor: #369bac;\n",
       "        --infoColor: #2683c9;\n",
       "        --warningColor: #faaf40;\n",
       "        --tealBackground: #eaf2f3;\n",
       "        --pageBackground: #e5e5e5;\n",
       "        --contrastTableRow: #fafafa;\n",
       "        --whiteBackground: #ffffff;\n",
       "        --primaryBackground: #e5e5e5;\n",
       "      }\n",
       "\n",
       "      /* RESET STYLE */\n",
       "      *,\n",
       "      *::after,\n",
       "      *::before {\n",
       "        margin: 0;\n",
       "        padding: 0;\n",
       "        box-sizing: border-box;\n",
       "        font-family: &quot;Asap&quot;, Arial, Helvetica, sans-serif;\n",
       "      }\n",
       "\n",
       "      /*\n",
       "      * Main content\n",
       "      */\n",
       "      .main {\n",
       "        position: relative;\n",
       "        background: #FFFFFF;\n",
       "        border: 1px solid #DBE5E7;\n",
       "        box-sizing: border-box;\n",
       "        border-radius: 4px;\n",
       "      }\n",
       "      .main .page-header {\n",
       "        margin-top: 0;\n",
       "      }\n",
       "\n",
       "      /* CSS DIV TABLE BASIC STYLE */\n",
       "\n",
       "      .wl-table-row .wl-table-head:first-child {\n",
       "        min-width: 360px;\n",
       "        z-index: 2;\n",
       "      }\n",
       "\n",
       "      .wl-table-wrap {\n",
       "        position: relative;\n",
       "      }\n",
       "\n",
       "      .wl-table {\n",
       "        display: table;\n",
       "        width: 100%;\n",
       "      }\n",
       "\n",
       "      .row&gt;* {\n",
       "        padding-right: 0 !important;\n",
       "        padding-left: 0 !important;\n",
       "      }\n",
       "\n",
       "      .wl-table-row {\n",
       "        display: table-row;\n",
       "      }\n",
       "\n",
       "      .wl-table-row:hover,\n",
       "      .wl-table-row:hover .wl-table-cell:first-child {\n",
       "        background-color: var(--brandSecondary100);\n",
       "      }\n",
       "      .wl-table-row--clickable:hover .wl-table-cell__title-button {\n",
       "        visibility: visible;\n",
       "      }\n",
       "\n",
       "      .wl-table-heading {\n",
       "        position: sticky;\n",
       "        top: 0;\n",
       "        z-index: 900;\n",
       "        display: table-header-group;\n",
       "        font-weight: 700;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell,\n",
       "      .wl-table-head {\n",
       "        border-bottom: 1px solid var(--brandSecondary200);\n",
       "        display: table-cell;\n",
       "        padding: 12px 18px;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell {\n",
       "        font-size: 14px;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell--top-spacing {\n",
       "        padding-top: 35px; /* cell-top-padding + cell-title-height */\n",
       "      }\n",
       "\n",
       "      .wl-table-head-wraper {\n",
       "        background-color: var(--white);\n",
       "      }\n",
       "\n",
       "      .wl-table-head {\n",
       "        position: sticky;\n",
       "        left: 0;\n",
       "        min-width: 100px;\n",
       "        border-bottom: 2px solid var(--brandSecondary100);\n",
       "        font-size: 12px;\n",
       "        line-height: 1.67;\n",
       "        white-space: nowrap;\n",
       "      }\n",
       "\n",
       "      .wl-sub-table-head {\n",
       "        position: relative;\n",
       "      }\n",
       "\n",
       "      .wl-table-body {\n",
       "        display: table-row-group;\n",
       "      }\n",
       "\n",
       "      .wl-table-row .wl-table-cell:first-child{\n",
       "        position: sticky;\n",
       "        left: 0;\n",
       "        background-color: var(--white);\n",
       "        border-right-width: 2px;\n",
       "      }\n",
       "\n",
       "      /* Table custom style */\n",
       "\n",
       "      .wl-table-cell__title-wrap {\n",
       "        display: flex;\n",
       "        justify-content: space-between;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell__title {\n",
       "        height: 25px;\n",
       "        margin: 0;\n",
       "        font-size: 14px;\n",
       "        font-weight: 700;\n",
       "        overflow: hidden;\n",
       "        white-space: nowrap;\n",
       "        text-overflow: ellipsis;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell__bedge-wrap {\n",
       "        padding: 2px 0;\n",
       "        white-space: nowrap;\n",
       "        overflow: hidden;\n",
       "        font-style: italic;\n",
       "        text-align: center;\n",
       "        color: var(--brandSecondary400);\n",
       "      }\n",
       "      .wl-table-cell__bedge {\n",
       "        height: 24px;\n",
       "        margin: 1px;\n",
       "        padding: 2px 8px;\n",
       "        border: 1px solid var(--brandSecondary400);\n",
       "        font-style: normal;\n",
       "        color: var(--brandSecondary900);\n",
       "        border-radius: 20px;\n",
       "        white-space: nowrap;\n",
       "      }\n",
       "\n",
       "      /* Property side panel */\n",
       "\n",
       "      .wl-compare-profile {\n",
       "        z-index: 999;\n",
       "        position: absolute;\n",
       "        right: 0;\n",
       "        background: var(--white);;\n",
       "        border-bottom: 1px solid var(--brandSecondary200);\n",
       "      }\n",
       "\n",
       "      /* Screen on smaller screens */\n",
       "      .no-responsive {\n",
       "        display: none;\n",
       "        position: fixed;\n",
       "        top: 0;\n",
       "        left: 0;\n",
       "        z-index: 1031;\n",
       "        width: 100vw;\n",
       "        height: 100vh;\n",
       "        background-color: var(--tealBackground);\n",
       "        display: flex;\n",
       "        align-items: center;\n",
       "        justify-content: center;\n",
       "      }\n",
       "\n",
       "      .no-responsive__content {\n",
       "        max-width: 600px;\n",
       "        width: 100%;\n",
       "        padding: 0 24px;\n",
       "      }\n",
       "\n",
       "      .no-responsive__title {\n",
       "        font-size: 96px;\n",
       "        font-weight: 300;\n",
       "        color: var(--brandSecondary900);\n",
       "        line-height: 1.167;\n",
       "      }\n",
       "\n",
       "      .no-responsive__text {\n",
       "        margin: 0;\n",
       "        font-size: 16px;\n",
       "        font-weight: 400;\n",
       "        color: var(--brandSecondary900);\n",
       "        line-height: 1.5;\n",
       "      }\n",
       "\n",
       "      .space-between {\n",
       "        display: flex;\n",
       "        justify-content: space-between;\n",
       "      }\n",
       "\n",
       "      .align-items {\n",
       "        display: flex;\n",
       "        align-items: center;\n",
       "      }\n",
       "\n",
       "      .display-flex{\n",
       "        display: flex;\n",
       "      }\n",
       "\n",
       "      .table-border-none {\n",
       "        padding: 0;\n",
       "        border: none;\n",
       "      }\n",
       "\n",
       "      .flex-direction-colum {\n",
       "        display: flex;\n",
       "        flex-direction: column;\n",
       "      }\n",
       "\n",
       "      .align-items {\n",
       "        align-items: center;\n",
       "      }\n",
       "\n",
       "      .search-input{\n",
       "        padding-top: 0 !important;\n",
       "        padding-bottom: 0 !important;\n",
       "      }\n",
       "\n",
       "      .search-input input{\n",
       "        border: none;\n",
       "        background: none;\n",
       "        outline: none;\n",
       "        height: 40px;\n",
       "        width: 100%;\n",
       "        font-size: 14px;\n",
       "      }\n",
       "\n",
       "      .search-input img{\n",
       "        height: 19px;\n",
       "        pointer-events: none;\n",
       "      }\n",
       "\n",
       "      input::placeholder {\n",
       "        color: var(--secondaryLight1000);\n",
       "      }\n",
       "\n",
       "      .text-align-center {\n",
       "        text-align: center;\n",
       "      }\n",
       "\n",
       "      .text-align-end {\n",
       "        text-align: end;\n",
       "      }\n",
       "\n",
       "      .drift-detection {\n",
       "        justify-content: space-between;\n",
       "        align-items: center;\n",
       "      }\n",
       "\n",
       "     .drift-detection-info-circle {\n",
       "       width: 15px;\n",
       "       height: 15px;\n",
       "       border-radius: 50px;\n",
       "       display: inline-block;\n",
       "       margin-right: 8px;\n",
       "     }\n",
       "\n",
       "     .severe-drift-circle-color {\n",
       "         background: #D40D00;\n",
       "     }\n",
       "\n",
       "     .moderate-drift-circle-color {\n",
       "         background: #F5843C;\n",
       "     }\n",
       "\n",
       "     .mild-drift-circle-color {\n",
       "         background: #F2C142;\n",
       "     }\n",
       "\n",
       "     .minimal-drift-circle-color {\n",
       "         background: #ABCA52;\n",
       "     }\n",
       "\n",
       "     .drift-detection-info-drifts-item {\n",
       "         padding-right: 20px;\n",
       "     }\n",
       "\n",
       "     .drift-detection-info-title {\n",
       "       font-family: Arial;\n",
       "       font-weight: bold;\n",
       "       font-size: 16px;\n",
       "       line-height: 130%;\n",
       "       color: #313B3D;\n",
       "     }\n",
       "\n",
       "     .drift-detection-info-drifts-item-count {\n",
       "       font-family: Arial;\n",
       "       font-weight: bold;\n",
       "       font-size: 14px;\n",
       "       line-height: 16px;\n",
       "       color: #000000;\n",
       "       padding-right: 8px;\n",
       "     }\n",
       "\n",
       "     .drift-detection-info-drifts-item-name {\n",
       "       font-family: Arial;\n",
       "       font-style: normal;\n",
       "       font-weight: normal;\n",
       "       font-size: 12px;\n",
       "       line-height: 14px;\n",
       "       color: #000000;\n",
       "     }\n",
       "\n",
       "     .drift-detection-info-drifts-item-range {\n",
       "       font-family: Arial;\n",
       "       font-style: normal;\n",
       "       font-weight: normal;\n",
       "       font-size: 11px;\n",
       "       line-height: 13px;\n",
       "       color: #6C757D;\n",
       "     }\n",
       "\n",
       "     .drift-detection-search-input {\n",
       "       display: flex;\n",
       "       align-items: center;\n",
       "       background: rgba(255, 255, 255, 0.7);\n",
       "       border: 1px solid #DBE5E7;\n",
       "       box-sizing: border-box;\n",
       "       border-radius: 4px;\n",
       "       width: 170px;\n",
       "       padding-left: 10px;\n",
       "     }\n",
       "\n",
       "     .drift-detection-search-input img{\n",
       "       margin-right: 5px;\n",
       "     }\n",
       "\n",
       "     .drift-detection-search-input input::placeholder {\n",
       "       font-family: Arial;\n",
       "       font-weight: normal;\n",
       "       font-size: 13px;\n",
       "       line-height: 16px;\n",
       "       color: #313B3D;\n",
       "     }\n",
       "\n",
       "     .close-filter-button {\n",
       "       display: flex;\n",
       "       justify-content: center;\n",
       "       align-items: center;\n",
       "       background: rgba(255, 255, 255, 0.7);\n",
       "       border: 1px solid #369BAC;\n",
       "       box-sizing: border-box;\n",
       "       border-radius: 4px;\n",
       "       width: 40px;\n",
       "       height: 40px;\n",
       "       cursor: pointer;\n",
       "       margin-left: 10px;\n",
       "     }\n",
       "\n",
       "     .filter-options-title {\n",
       "       width: 240px;\n",
       "     }\n",
       "\n",
       "     .filter-options-title p {\n",
       "       margin: 0;\n",
       "     }\n",
       "\n",
       "     .dropdown-container {\n",
       "       position: absolute;\n",
       "       right: 18px;\n",
       "       z-index: 999;\n",
       "       background: #FFFFFF;\n",
       "       border: 1px solid #DBE5E7;\n",
       "       box-sizing: border-box;\n",
       "       box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.05);\n",
       "       border-radius: 4px;\n",
       "       padding: 10px !important;\n",
       "       border: none !important;\n",
       "     }\n",
       "\n",
       "     .form-check-input:checked {\n",
       "       background-color: #0E7384;\n",
       "       border-color: #0E7384;\n",
       "     }\n",
       "\n",
       "     .form-check-input[type=checkbox] {\n",
       "       border-radius: 2px;\n",
       "     }\n",
       "\n",
       "      .justify-content-center {\n",
       "        justify-content: center;\n",
       "      }\n",
       "\n",
       "      .wl-table-cell__graph-wrap {\n",
       "        width: 0;\n",
       "      }\n",
       "\n",
       "      .svg-container {\n",
       "        display: inline-block;\n",
       "        position: relative;\n",
       "        width: 85%;\n",
       "        padding-bottom: 17%;\n",
       "        vertical-align: top;\n",
       "        overflow: hidden;\n",
       "      }\n",
       "\n",
       "      .svg-content-responsive {\n",
       "        display: inline-block;\n",
       "        position: absolute;\n",
       "        left: 0;\n",
       "      }\n",
       "\n",
       "      .reference-table-head {\n",
       "        min-width: 250px;\n",
       "      }\n",
       "\n",
       "      .wl__dropdown_arrow-icon {\n",
       "        position: relative;\n",
       "      }\n",
       "\n",
       "      .notif-circle-container{\n",
       "        position: absolute;\n",
       "        top: -4px;\n",
       "        right: -4px;\n",
       "        padding: 5.3px;\n",
       "        border-radius: 50%;\n",
       "        background-color: white;\n",
       "        cursor: pointer;\n",
       "      }\n",
       "\n",
       "      .notif-circle {\n",
       "        position: absolute;\n",
       "        top: 2px;\n",
       "        right: 2px;\n",
       "        padding: 3.3px;\n",
       "        border-radius: 50%;\n",
       "        background-color: #F2994A;\n",
       "      }\n",
       "\n",
       "\n",
       "      .header-title {\n",
       "        font-size: 26px;\n",
       "        font-weight: 700;\n",
       "        color: #444444;\n",
       "      }\n",
       "\n",
       "      .statistic-number-title {\n",
       "        font-family: Arial;\n",
       "        font-weight: normal;\n",
       "        font-size: 14px;\n",
       "        line-height: 20px;\n",
       "        color: #6C757D;\n",
       "      }\n",
       "\n",
       "      .statistic-number {\n",
       "        font-family: Arial;\n",
       "        font-weight: bold;\n",
       "        font-size: 20px;\n",
       "        line-height: 140%;\n",
       "        display: flex;\n",
       "        align-items: center;\n",
       "        color: #0E7384;\n",
       "      }\n",
       "\n",
       "      .statistic-measurement {\n",
       "        font-size: 15px !important;\n",
       "        margin-left: 3px;\n",
       "      }\n",
       "\n",
       "      .statistic-measurement-percent {\n",
       "        font-size: 15px !important;\n",
       "      }\n",
       "\n",
       "      .question-mark {\n",
       "        font-size: 10px;\n",
       "        font-weight: 900;\n",
       "        color: #0E7384;\n",
       "        border-radius: 50px;\n",
       "        border: 2px solid #0E7384;\n",
       "        padding: 0px 4px;\n",
       "        transition: 0.5s;\n",
       "        cursor: pointer;\n",
       "      }\n",
       "\n",
       "      .question-mark:hover {\n",
       "        color: white;\n",
       "        background: #0E7384;\n",
       "        border: 2px solid none;\n",
       "        transition: 0.5s;\n",
       "      }\n",
       "\n",
       "      .tooltip-full-number {\n",
       "        position: relative;\n",
       "        display: inline-block;\n",
       "      }\n",
       "\n",
       "      .tooltip-full-number .tooltiptext {\n",
       "        visibility: hidden;\n",
       "        background: black;\n",
       "        color: white;\n",
       "        border: 1px solid black;\n",
       "        text-align: start;\n",
       "        padding: 3px;\n",
       "        position: absolute;\n",
       "        z-index: 1002;\n",
       "        top: 0;\n",
       "        left: 100%;\n",
       "        margin-left: 5px;\n",
       "        opacity: 0;\n",
       "        transition: opacity 0.5s;\n",
       "        font-size: 13px;\n",
       "        font-weight: normal;\n",
       "        line-height: 100%;\n",
       "      }\n",
       "\n",
       "      .tooltip-full-number:hover .tooltiptext {\n",
       "        visibility: visible;\n",
       "        opacity: 1;\n",
       "      }\n",
       "\n",
       "      .display-flex {\n",
       "        display: flex;\n",
       "      }\n",
       "\n",
       "      .flex-direction-column {\n",
       "        flex-direction: column;\n",
       "      }\n",
       "\n",
       "      .justify-content-space-between {\n",
       "        justify-content: space-between;\n",
       "      }\n",
       "\n",
       "      .justify-content-center {\n",
       "        justify-content: center;\n",
       "      }\n",
       "\n",
       "      .align-items-center {\n",
       "        align-items: center;\n",
       "      }\n",
       "\n",
       "      .padding-right-30 {\n",
       "        padding-right: 30px;\n",
       "      }\n",
       "\n",
       "      .padding-5 {\n",
       "        padding: 5px;\n",
       "      }\n",
       "\n",
       "      .text-color {\n",
       "        color: var(--secondaryLight1000);\n",
       "      }\n",
       "\n",
       "      .error-message {\n",
       "        display: flex;\n",
       "        justify-content: center;\n",
       "        align-items: center;\n",
       "        color: rgb(255, 114, 71);\n",
       "        font-size: 30px;\n",
       "        font-weight: 900;\n",
       "      }\n",
       "\n",
       "      @media screen and (min-width: 500px) {\n",
       "        .desktop-content {\n",
       "          display: block;\n",
       "        }\n",
       "        .no-responsive {\n",
       "          display: none;\n",
       "        }\n",
       "      }\n",
       "    &lt;/style&gt;\n",
       "  &lt;/head&gt;\n",
       "\n",
       "  &lt;body id=&quot;generated-html&quot;&gt;&lt;/body&gt;\n",
       "\n",
       "  &lt;script id=&quot;entry-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;\n",
       "    \n",
       "      &lt;div class=&quot;desktop-content&quot;&gt;\n",
       "        &lt;div class=&quot;container-fluid&quot;&gt;\n",
       "          &lt;div class=&quot;feature-summary-statistics-wrap&quot;&gt;\n",
       "            &lt;div class=&quot;feature-summary-statistics&quot;&gt;\n",
       "              &lt;div class=&quot;mb-4&quot;&gt;\n",
       "                  &lt;strong class=&quot;header-title&quot;&gt;Profile Summary&lt;/strong&gt;\n",
       "              &lt;/div&gt;\n",
       "              &lt;div class=&quot;display-flex statistics&quot;&gt;\n",
       "                &lt;div class=&quot;padding-right-30&quot;&gt;\n",
       "                  &lt;div class=&quot;statistic-number-title&quot;&gt;Observations\n",
       "                    &lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
       "                      &lt;span class=&quot;question-mark&quot;&gt;?&lt;/span&gt;\n",
       "                    &lt;span class=&quot;tooltiptext&quot;&gt;\n",
       "                     &lt;div class=&quot;mb-1&quot;&gt;The sum of counts for each feature. For a single dataframe, it is equal to the number of cells, i.e., rows * columns.&lt;/div&gt;\n",
       "                    &lt;/span&gt;\n",
       "                    &lt;/div&gt;\n",
       "                    &lt;/div&gt;\n",
       "                  &lt;div class=&quot;statistic-number&quot;&gt;{{{observations this}}}&lt;/div&gt;\n",
       "                &lt;/div&gt;\n",
       "                &lt;div class=&quot;padding-right-30&quot;&gt;\n",
       "                  &lt;div class=&quot;statistic-number-title&quot;&gt;Missing Cells&lt;/div&gt;\n",
       "                  &lt;div class=&quot;statistic-number&quot;&gt;\n",
       "                    {{{missingCells this}}}\n",
       "                    &lt;div&gt;{{{missingCellsPercentage this}}}&lt;/div&gt;\n",
       "                  &lt;/div&gt;\n",
       "                &lt;/div&gt;\n",
       "                &lt;div class=&quot;wl-compare-profile&quot; id=&quot;compare-profile&quot; style=&quot;display: flex; justify-content: space-around&quot;&gt;\n",
       "                  &lt;div class=&quot;drift-detection-wrap&quot;&gt;\n",
       "                    &lt;div class=&quot;drift-detection display-flex&quot;&gt;\n",
       "                      &lt;div class=&quot;drift-detection-search-input-wrap display-flex&quot;&gt;\n",
       "                        &lt;div class=&quot;drift-detection-search-input search-input &quot;&gt;\n",
       "                          &lt;input type=&quot;text&quot; id=&quot;wl__feature-search&quot; placeholder=&quot;Quick search...&quot;/&gt;\n",
       "                          &lt;img src=&quot;&quot;/&gt;\n",
       "                        &lt;/div&gt;\n",
       "                        &lt;div class=&quot;wl__dropdown_arrow-icon&quot; &gt;\n",
       "                          &lt;div onclick=&quot;openFilter()&quot; class=&quot;close-filter-button&quot;&gt;\n",
       "                            &lt;div class=&quot;display-flex close-filter-icon d-none&quot;&gt;\n",
       "                              &lt;img src=&quot;&quot;/&gt;\n",
       "                            &lt;/div&gt;\n",
       "                            &lt;div class=&quot;display-flex filter-icon&quot;&gt;\n",
       "                              &lt;img src=&quot;&quot;/&gt;\n",
       "                            &lt;/div&gt;\n",
       "                          &lt;/div&gt;\n",
       "                          &lt;span class=&quot;notif-circle-container&quot;&gt;\n",
       "                            &lt;span class=&quot;notif-circle&quot;&gt;&lt;/span&gt;\n",
       "                          &lt;/span&gt;\n",
       "                        &lt;/div&gt;\n",
       "                      &lt;/div&gt;\n",
       "                    &lt;/div&gt;\n",
       "                  &lt;/div&gt;\n",
       "                  &lt;div class=&quot;dropdown-container flex-direction-colum mb-2 d-none&quot; id=&quot;dropdown-container&quot;&gt;\n",
       "                    &lt;div class=&quot;filter-options&quot;&gt;\n",
       "                      &lt;div class=&quot;filter-options-title space-between dropdown&quot;&gt;\n",
       "                        &lt;p&gt;Filter by type&lt;/p&gt;\n",
       "                      &lt;/div&gt;\n",
       "                      &lt;div class=&quot;form-check mb-1 mt-2&quot;&gt;\n",
       "                        &lt;input\n",
       "                          class=&quot;form-check-input wl__feature-filter-input&quot;\n",
       "                          type=&quot;checkbox&quot;\n",
       "                          name=&quot;checkbox&quot;\n",
       "                          value=&quot;Discrete&quot;\n",
       "                          id=&quot;inferredDiscrete&quot;\n",
       "                          onclick=&quot;changeDiscreteValue()&quot;\n",
       "                          checked\n",
       "                        /&gt;\n",
       "                        &lt;label class=&quot;form-check-label&quot; for=&quot;inferredDiscrete&quot;&gt;\n",
       "                          Inferred discrete (&lt;span class=&quot;wl__feature-count--discrete&quot;&gt;{{getDiscreteTypeCount}}&lt;/span&gt;)\n",
       "                        &lt;/label&gt;\n",
       "                      &lt;/div&gt;\n",
       "                      &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
       "                        &lt;input\n",
       "                          class=&quot;form-check-input wl__feature-filter-input&quot;\n",
       "                          type=&quot;checkbox&quot;\n",
       "                          name=&quot;checkbox&quot;\n",
       "                          value=&quot;Non-discrete&quot;\n",
       "                          id=&quot;inferredNonDiscrete&quot;\n",
       "                          onclick=&quot;changeNonDiscreteValue()&quot;\n",
       "                          checked\n",
       "                        /&gt;\n",
       "                        &lt;label class=&quot;form-check-label&quot; for=&quot;inferredNonDiscrete&quot;&gt;\n",
       "                          Inferred non-discrete (&lt;span\n",
       "                            class=&quot;wl__feature-count--non-discrete&quot;\n",
       "                          &gt;{{getNonDiscreteTypeCount}}&lt;/span&gt;)\n",
       "                        &lt;/label&gt;\n",
       "                      &lt;/div&gt;\n",
       "                      &lt;div class=&quot;form-check mb-1&quot;&gt;\n",
       "                        &lt;input\n",
       "                          class=&quot;form-check-input wl__feature-filter-input&quot;\n",
       "                          type=&quot;checkbox&quot;\n",
       "                          name=&quot;checkbox&quot;\n",
       "                          value=&quot;Unknown&quot;\n",
       "                          id=&quot;inferredUnknown&quot;\n",
       "                          onclick=&quot;changeUnknwonValue()&quot;\n",
       "                          checked\n",
       "                        /&gt;\n",
       "                        &lt;label class=&quot;form-check-label&quot; for=&quot;inferredUnknown&quot;&gt;\n",
       "                          Unknown (&lt;span class=&quot;wl__feature-count--unknown&quot;&gt;{{getUnknownTypeCount}}&lt;/span&gt;)\n",
       "                        &lt;/label&gt;\n",
       "                      &lt;/div&gt;\n",
       "                    &lt;/div&gt;\n",
       "                  &lt;/div&gt;\n",
       "                  &lt;/div&gt;\n",
       "            &lt;/div&gt;\n",
       "          &lt;/div&gt;\n",
       "          &lt;div class=&quot;row&quot;&gt;\n",
       "            &lt;div class=&quot;main&quot;&gt;\n",
       "              &lt;div class=&quot;wl-table-wrap&quot; id=&quot;table-content&quot;&gt;\n",
       "                &lt;div class=&quot;wl-table&quot;&gt;\n",
       "                  &lt;div class=&quot;wl-table-heading&quot;&gt;\n",
       "                    &lt;div class=&quot;wl-table-row wl-table-row--bottom-shadow&quot;&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper&quot;&gt;\n",
       "                        &lt;div class=&quot;wl-table-head table-border-none graph-table-head&quot;&gt;Target&lt;/div&gt;\n",
       "                      &lt;/div&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper text-align-end&quot;&gt;Total count&lt;/div&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper text-align-end&quot;&gt;Missing&lt;/div&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper text-align-end&quot;&gt;Mean&lt;/div&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper text-align-end&quot;&gt;Min&lt;/div&gt;\n",
       "                      &lt;div class=&quot;wl-table-head wl-table-head-wraper text-align-end&quot;&gt;Max&lt;/div&gt;\n",
       "\n",
       "                    &lt;/div&gt;\n",
       "                  &lt;/div&gt;\n",
       "                  &lt;ul class=&quot;wl-table-body wl__table-body&quot; id=&quot;table-body&quot;&gt;\n",
       "{{#each this.columns}}                    &lt;li\n",
       "                    {{#if this.numberSummary}} class=&quot;wl-table-row wl-table-row--clickable&quot; {{else}} class=&quot;wl-table-row&quot; {{/if}}\n",
       "                    data-feature-name={{@key}}\n",
       "                    data-inferred-type={{inferredType this}}\n",
       "                    data-scroll-to-feature-name={{@key}}\n",
       "                  &gt;\n",
       "                      &lt;div class=&quot;wl-table-cell wl-table-cell__graph-wrap&quot;&gt;\n",
       "                        &lt;div class=&quot;wl-table-cell__title-wrap&quot;&gt;\n",
       "                          &lt;h4 class=&quot;wl-table-cell__title&quot;&gt;{{@key}}&lt;/h4&gt;\n",
       "                          &lt;div&gt;&lt;/div&gt;\n",
       "                        &lt;/div&gt;\n",
       "                          &lt;div class=&quot;display-flex&quot;&gt;\n",
       "                              {{{getGraphHtml this}}}\n",
       "                          &lt;/div&gt;\n",
       "                      &lt;/div&gt;\n",
       "                      &lt;div\n",
       "                        class=&quot;wl-table-cell wl-table-cell--top-spacing align-middle&quot;\n",
       "                      &gt;&lt;div class=&quot;text-align-end&quot;&gt;{{totalCount this}}&lt;/div&gt;&lt;/div&gt;\n",
       "                      &lt;div\n",
       "                        class=&quot;wl-table-cell wl-table-cell--top-spacing align-middle&quot;\n",
       "                      &gt;&lt;div class=&quot;text-align-end&quot;&gt;{{missing this}}&lt;/div&gt;&lt;/div&gt;\n",
       "                      &lt;div\n",
       "                        class=&quot;wl-table-cell wl-table-cell--top-spacing align-middle&quot;\n",
       "                      &gt;&lt;div class=&quot;text-align-end&quot;&gt;{{mean this}}&lt;/div&gt;&lt;/div&gt;\n",
       "                      &lt;div\n",
       "                        class=&quot;wl-table-cell wl-table-cell--top-spacing align-middle&quot;\n",
       "                      &gt;&lt;div class=&quot;text-align-end&quot;&gt;{{minimumValue this}}&lt;/div&gt;&lt;/div&gt;\n",
       "                      &lt;div\n",
       "                        class=&quot;wl-table-cell wl-table-cell--top-spacing align-middle&quot;\n",
       "                      &gt;&lt;div class=&quot;text-align-end&quot;&gt;{{maximumValue this}}&lt;/div&gt;&lt;/div&gt;\n",
       "\n",
       "                    &lt;/li&gt;\n",
       "{{/each}}                  &lt;/ul&gt;\n",
       "                &lt;/div&gt;\n",
       "              &lt;/div&gt;\n",
       "            &lt;/div&gt;\n",
       "          &lt;/div&gt;\n",
       "        &lt;/div&gt;\n",
       "      &lt;/div&gt;\n",
       "      &lt;div class=&quot;no-responsive&quot;&gt;\n",
       "        &lt;div class=&quot;no-responsive__content&quot;&gt;\n",
       "          &lt;h1 class=&quot;no-responsive__title&quot;&gt;Hold on! :)&lt;/h1&gt;\n",
       "          &lt;p class=&quot;no-responsive__text&quot;&gt;\n",
       "            It looks like your current screen size or device is not yet supported by the WhyLabs Sandbox. The Sandbox is\n",
       "            best experienced on a desktop computer. Please try maximizing this window or switching to another device. We\n",
       "            are working on adding support for a larger variety of devices.\n",
       "          &lt;/p&gt;\n",
       "        &lt;/div&gt;\n",
       "      &lt;/div&gt;\n",
       "    \n",
       "  &lt;/script&gt;\n",
       "\n",
       "  &lt;script src=&quot;https://code.jquery.com/jquery-3.6.0.min.js&quot; integrity=&quot;sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;\n",
       "\n",
       "  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js&quot; integrity=&quot;sha512-cd6CHE+XWDQ33ElJqsi0MdNte3S+bQY819f7p3NUHgwQQLXSKjE4cPZTeGNI+vaxZynk1wVU3hoHmow3m089wA==&quot; crossorigin=&quot;anonymous&quot; referrerpolicy=&quot;no-referrer&quot;&gt;&lt;/script&gt;\n",
       "\n",
       "  &lt;script&gt;\n",
       "    const getTargetProfile = () =&gt; { return {&quot;columns&quot;: {&quot;id&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 1.0, &quot;end&quot;: 200.00002, &quot;width&quot;: 0, &quot;counts&quot;: [7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7], &quot;max&quot;: 200.0, &quot;min&quot;: 1.0, &quot;bins&quot;: [1.0, 7.6333340000000005, 14.266668000000001, 20.900002, 27.533336000000002, 34.16667, 40.800004, 47.433338000000006, 54.066672000000004, 60.700006, 67.33334, 73.96667400000001, 80.600008, 87.23334200000001, 93.86667600000001, 100.50001, 107.13334400000001, 113.76667800000001, 120.400012, 127.03334600000001, 133.66668, 140.300014, 146.93334800000002, 153.56668200000001, 160.200016, 166.83335000000002, 173.46668400000001, 180.100018, 186.73335200000002, 193.36668600000002, 200.00002], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: 1.0, &quot;max&quot;: 200.0, &quot;range&quot;: 199.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 11.0, &quot;iqr&quot;: 100.0, &quot;q1&quot;: 51.0, &quot;median&quot;: 101.0, &quot;q3&quot;: 151.0, &quot;ninety_fifth_percentile&quot;: 191.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 57.879184513951124, &quot;coefficient_of_variation&quot;: 0.5759122837209067, &quot;sum&quot;: 20100.0, &quot;variance&quot;: 3350.0, &quot;mean&quot;: 100.5}}}, &quot;response&quot;: {&quot;histogram&quot;: null, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: null, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: NaN, &quot;max&quot;: NaN, &quot;range&quot;: NaN, &quot;quantile_statistics&quot;: null, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: null, &quot;coefficient_of_variation&quot;: null, &quot;sum&quot;: null, &quot;variance&quot;: null, &quot;mean&quot;: null}}}, &quot;rouge-l-f&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.10937499758300784, &quot;end&quot;: 0.40000003507199955, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 1, 0, 4, 5, 4, 4, 1, 10, 10, 10, 13, 14, 23, 13, 21, 15, 13, 8, 10, 7, 4, 0, 2, 3, 1, 1, 1, 1], &quot;max&quot;: 0.399999995072, &quot;min&quot;: 0.10937499758300784, &quot;bins&quot;: [0.10937499758300784, 0.11906249883264089, 0.12875000008227394, 0.13843750133190702, 0.14812500258154007, 0.15781250383117312, 0.16750000508080617, 0.17718750633043923, 0.1868750075800723, 0.19656250882970533, 0.2062500100793384, 0.21593751132897146, 0.2256250125786045, 0.23531251382823756, 0.24500001507787064, 0.2546875163275037, 0.2643750175771368, 0.2740625188267698, 0.2837500200764028, 0.29343752132603595, 0.303125022575669, 0.312812523825302, 0.3225000250749351, 0.33218752632456816, 0.3418750275742012, 0.35156252882383426, 0.3612500300734673, 0.37093753132310037, 0.38062503257273345, 0.39031253382236647, 0.40000003507199955], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 99.50004892799049, &quot;min&quot;: 0.10937499758300784, &quot;max&quot;: 0.399999995072, &quot;range&quot;: 0.2906249974889922, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.1666666626899094, &quot;iqr&quot;: 0.058608057279977616, &quot;q1&quot;: 0.22710622347810924, &quot;median&quot;: 0.2556390937961446, &quot;q3&quot;: 0.28571428075808686, &quot;ninety_fifth_percentile&quot;: 0.3304347784438563}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.048629821419078456, &quot;coefficient_of_variation&quot;: 0.19075638080642082, &quot;sum&quot;: 50.98631166464402, &quot;variance&quot;: 0.0023648595312514616, &quot;mean&quot;: 0.2549315583232201}}}, &quot;rouge-l-p&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.06363636363636363, &quot;end&quot;: 0.520000052, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 2, 6, 3, 6, 14, 7, 13, 20, 11, 20, 18, 14, 6, 17, 5, 4, 4, 5, 7, 4, 5, 0, 3, 2, 1, 1, 0, 1], &quot;max&quot;: 0.52, &quot;min&quot;: 0.06363636363636363, &quot;bins&quot;: [0.06363636363636363, 0.07884848658181817, 0.09406060952727271, 0.10927273247272727, 0.12448485541818181, 0.13969697836363637, 0.1549091013090909, 0.17012122425454546, 0.1853333472, 0.20054547014545454, 0.21575759309090908, 0.23096971603636363, 0.2461818389818182, 0.2613939619272727, 0.2766060848727273, 0.2918182078181818, 0.3070303307636364, 0.3222424537090909, 0.3374545766545455, 0.35266669959999997, 0.36787882254545456, 0.38309094549090905, 0.39830306843636365, 0.41351519138181814, 0.42872731432727273, 0.44393943727272733, 0.4591515602181818, 0.4743636831636364, 0.4895758061090909, 0.5047879290545455, 0.520000052], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 88.0000382463329, &quot;min&quot;: 0.06363636363636363, &quot;max&quot;: 0.52, &quot;range&quot;: 0.4563636363636364, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.13580246913580246, &quot;iqr&quot;: 0.09999999999999998, &quot;q1&quot;: 0.2, &quot;median&quot;: 0.24242424242424243, &quot;q3&quot;: 0.3, &quot;ninety_fifth_percentile&quot;: 0.41025641025641024}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08323988432940421, &quot;coefficient_of_variation&quot;: 0.32828700116146936, &quot;sum&quot;: 50.71165415316723, &quot;variance&quot;: 0.006928878343172593, &quot;mean&quot;: 0.25355827076583615}}}, &quot;rouge-l-r&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.12560386473429952, &quot;end&quot;: 0.6341464048780487, &quot;width&quot;: 0, &quot;counts&quot;: [1, 7, 9, 10, 9, 17, 12, 17, 12, 16, 14, 15, 14, 10, 7, 5, 5, 1, 2, 4, 4, 0, 3, 0, 1, 1, 2, 1, 0, 1], &quot;max&quot;: 0.6341463414634146, &quot;min&quot;: 0.12560386473429952, &quot;bins&quot;: [0.12560386473429952, 0.14255528273909115, 0.1595067007438828, 0.17645811874867445, 0.1934095367534661, 0.21036095475825772, 0.2273123727630494, 0.24426379076784102, 0.26121520877263266, 0.2781666267774243, 0.2951180447822159, 0.3120694627870076, 0.32902088079179925, 0.34597229879659086, 0.3629237168013825, 0.37987513480617413, 0.3968265528109658, 0.41377797081575746, 0.43072938882054906, 0.4476808068253407, 0.46463222483013233, 0.481583642834924, 0.49853506083971566, 0.5154864788445073, 0.5324378968492989, 0.5493893148540906, 0.5663407328588822, 0.5832921508636739, 0.6002435688684655, 0.6171949868732571, 0.6341464048780487], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 85.50003609808057, &quot;min&quot;: 0.12560386473429952, &quot;max&quot;: 0.6341463414634146, &quot;range&quot;: 0.5085424767291151, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.16666666666666666, &quot;iqr&quot;: 0.11722099039172212, &quot;q1&quot;: 0.22424242424242424, &quot;median&quot;: 0.2857142857142857, &quot;q3&quot;: 0.34146341463414637, &quot;ninety_fifth_percentile&quot;: 0.4722222222222222}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.09511942261797329, &quot;coefficient_of_variation&quot;: 0.3226784719727463, &quot;sum&quot;: 58.95616279353595, &quot;variance&quot;: 0.009047704559176608, &quot;mean&quot;: 0.29478081396767974}}}, &quot;rouge-2-f&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.13953489386695483, &quot;width&quot;: 0, &quot;counts&quot;: [9, 7, 13, 12, 6, 14, 12, 14, 16, 18, 8, 18, 15, 2, 9, 7, 4, 4, 2, 0, 3, 1, 2, 0, 1, 1, 1, 0, 0, 1], &quot;max&quot;: 0.13953487991346683, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.004651163128898494, 0.009302326257796988, 0.013953489386695482, 0.018604652515593977, 0.023255815644492472, 0.027906978773390965, 0.03255814190228946, 0.03720930503118795, 0.04186046816008645, 0.046511631288984945, 0.051162794417883434, 0.05581395754678193, 0.060465120675680425, 0.06511628380457891, 0.06976744693347742, 0.0744186100623759, 0.0790697731912744, 0.0837209363201729, 0.08837209944907139, 0.09302326257796989, 0.09767442570686838, 0.10232558883576687, 0.10697675196466537, 0.11162791509356386, 0.11627907822246235, 0.12093024135136085, 0.12558140448025934, 0.13023256760915783, 0.13488373073805632, 0.13953489386695483], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 96.00004553797348, &quot;min&quot;: 0.0, &quot;max&quot;: 0.13953487991346683, &quot;range&quot;: 0.13953487991346683, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.0065359431449474445, &quot;iqr&quot;: 0.032851359090955344, &quot;q1&quot;: 0.024291493205921375, &quot;median&quot;: 0.041025636395003805, &quot;q3&quot;: 0.05714285229687672, &quot;ninety_fifth_percentile&quot;: 0.0952380910004537}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.025897218102317775, &quot;coefficient_of_variation&quot;: 0.6081464018246296, &quot;sum&quot;: 8.516770969825032, &quot;variance&quot;: 0.0006706659054390154, &quot;mean&quot;: 0.04258385484912516}}}, &quot;rouge-2-p&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.14529915982905983, &quot;width&quot;: 0, &quot;counts&quot;: [9, 12, 13, 12, 12, 12, 15, 9, 9, 20, 16, 10, 9, 5, 8, 3, 4, 4, 2, 5, 3, 3, 0, 1, 1, 0, 0, 1, 1, 1], &quot;max&quot;: 0.1452991452991453, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.004843305327635328, 0.009686610655270655, 0.014529915982905983, 0.01937322131054131, 0.02421652663817664, 0.029059831965811966, 0.033903137293447294, 0.03874644262108262, 0.04358974794871795, 0.04843305327635328, 0.053276358603988605, 0.05811966393162393, 0.06296296925925926, 0.06780627458689459, 0.07264957991452992, 0.07749288524216524, 0.08233619056980057, 0.0871794958974359, 0.09202280122507123, 0.09686610655270655, 0.10170941188034188, 0.10655271720797721, 0.11139602253561254, 0.11623932786324787, 0.1210826331908832, 0.12592593851851852, 0.13076924384615385, 0.13561254917378918, 0.1404558545014245, 0.14529915982905983], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 82.50003360213428, &quot;min&quot;: 0.0, &quot;max&quot;: 0.1452991452991453, &quot;range&quot;: 0.1452991452991453, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.005649717514124294, &quot;iqr&quot;: 0.03852122824520564, &quot;q1&quot;: 0.020618556701030927, &quot;median&quot;: 0.043478260869565216, &quot;q3&quot;: 0.05913978494623656, &quot;ninety_fifth_percentile&quot;: 0.0990990990990991}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.02918286181092049, &quot;coefficient_of_variation&quot;: 0.6701311470667567, &quot;sum&quot;: 8.709597200087574, &quot;variance&quot;: 0.0008516394234752816, &quot;mean&quot;: 0.04354798600043787}}}, &quot;rouge-2-r&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.2777778055555556, &quot;width&quot;: 0, &quot;counts&quot;: [13, 21, 23, 24, 21, 27, 16, 17, 10, 7, 5, 3, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 2], &quot;max&quot;: 0.2777777777777778, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.009259260185185187, 0.018518520370370373, 0.027777780555555562, 0.03703704074074075, 0.04629630092592593, 0.055555561111111124, 0.0648148212962963, 0.0740740814814815, 0.08333334166666669, 0.09259260185185186, 0.10185186203703706, 0.11111112222222225, 0.12037038240740743, 0.1296296425925926, 0.1388889027777778, 0.148148162962963, 0.15740742314814818, 0.16666668333333337, 0.17592594351851853, 0.18518520370370373, 0.19444446388888892, 0.2037037240740741, 0.2129629842592593, 0.2222222444444445, 0.23148150462962966, 0.24074076481481485, 0.250000025, 0.2592592851851852, 0.2685185453703704, 0.2777778055555556], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 85.50003609808057, &quot;min&quot;: 0.0, &quot;max&quot;: 0.2777777777777778, &quot;range&quot;: 0.2777777777777778, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.006802721088435374, &quot;iqr&quot;: 0.0434931506849315, &quot;q1&quot;: 0.025, &quot;median&quot;: 0.045454545454545456, &quot;q3&quot;: 0.0684931506849315, &quot;ninety_fifth_percentile&quot;: 0.11764705882352941}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.04436871041903559, &quot;coefficient_of_variation&quot;: 0.8405242900236517, &quot;sum&quot;: 10.55738922614291, &quot;variance&quot;: 0.0019685824642482375, &quot;mean&quot;: 0.052786946130714545}}}, &quot;response.relevance_to_prompt&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.3410143256187439, &quot;end&quot;: 0.9024633475591004, &quot;width&quot;: 0, &quot;counts&quot;: [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 6, 5, 7, 13, 10, 19, 24, 13, 24, 23, 19, 10, 8, 5], &quot;max&quot;: 0.9024632573127747, &quot;min&quot;: 0.3410143256187439, &quot;bins&quot;: [0.3410143256187439, 0.35972929301675577, 0.37844426041476764, 0.39715922781277957, 0.41587419521079144, 0.4345891626088033, 0.4533041300068152, 0.47201909740482706, 0.490734064802839, 0.5094490322008508, 0.5281639995988627, 0.5468789669968745, 0.5655939343948865, 0.5843089017928984, 0.6030238691909102, 0.6217388365889222, 0.6404538039869341, 0.6591687713849459, 0.6778837387829577, 0.6965987061809698, 0.7153136735789816, 0.7340286409769934, 0.7527436083750053, 0.7714585757730172, 0.7901735431710291, 0.808888510569041, 0.8276034779670529, 0.8463184453650647, 0.8650334127630767, 0.8837483801610885, 0.9024633475591004], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: 0.3410143256187439, &quot;max&quot;: 0.9024632573127747, &quot;range&quot;: 0.5614489316940308, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.6181663274765015, &quot;iqr&quot;: 0.09734678268432617, &quot;q1&quot;: 0.7255511283874512, &quot;median&quot;: 0.7735737562179565, &quot;q3&quot;: 0.8228979110717773, &quot;ninety_fifth_percentile&quot;: 0.8705755472183228}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.0859011698636574, &quot;coefficient_of_variation&quot;: 0.11257606621133481, &quot;sum&quot;: 152.6100045144558, &quot;variance&quot;: 0.007379010983944921, &quot;mean&quot;: 0.7630500225722789}}}, &quot;response.flesch_reading_ease&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 9.38, &quot;end&quot;: 93.340009334, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 0, 0, 1, 1, 0, 0, 4, 0, 4, 5, 3, 5, 10, 9, 7, 14, 20, 21, 5, 17, 20, 10, 19, 13, 4, 4, 1, 2], &quot;max&quot;: 93.34, &quot;min&quot;: 9.38, &quot;bins&quot;: [9.38, 12.1786669778, 14.977333955600002, 17.776000933400002, 20.574667911200002, 23.373334889000002, 26.172001866800002, 28.970668844600006, 31.769335822400002, 34.568002800200006, 37.366669778, 40.165336755800006, 42.96400373360001, 45.762670711400006, 48.56133768920001, 51.360004667000005, 54.15867164480001, 56.95733862260001, 59.75600560040001, 62.55467257820001, 65.35333955600001, 68.1520065338, 70.9506735116, 73.7493404894, 76.54800746720001, 79.346674445, 82.1453414228, 84.94400840060001, 87.74267537840001, 90.5413423562, 93.340009334], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 87.00003737958137, &quot;min&quot;: 9.38, &quot;max&quot;: 93.34, &quot;range&quot;: 83.96000000000001, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 39.77, &quot;iqr&quot;: 17.22, &quot;q1&quot;: 57.61, &quot;median&quot;: 64.64, &quot;q3&quot;: 74.83, &quot;ninety_fifth_percentile&quot;: 83.36}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 13.75281971416961, &quot;coefficient_of_variation&quot;: 0.21340530803464697, &quot;sum&quot;: 12888.919999999998, &quot;variance&quot;: 189.14005009045226, &quot;mean&quot;: 64.4446}}}, &quot;response.automated_readability_index&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 5.0, &quot;end&quot;: 20.50000205, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 3, 2, 5, 5, 17, 7, 15, 14, 11, 13, 18, 18, 15, 8, 11, 10, 6, 4, 6, 1, 0, 0, 3, 3, 0, 0, 1, 1], &quot;max&quot;: 20.5, &quot;min&quot;: 5.0, &quot;bins&quot;: [5.0, 5.516666735, 6.03333347, 6.550000205, 7.066666939999999, 7.5833336749999996, 8.10000041, 8.616667145, 9.133333879999999, 9.650000615, 10.166667349999999, 10.683334084999998, 11.20000082, 11.716667554999999, 12.233334289999998, 12.750001025, 13.266667759999999, 13.783334494999998, 14.30000123, 14.816667964999999, 15.333334699999998, 15.850001435, 16.366668169999997, 16.883334904999998, 17.40000164, 17.916668375, 18.433335109999998, 18.950001844999996, 19.466668579999997, 19.983335314999998, 20.50000205], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 42.00000865757673, &quot;min&quot;: 5.0, &quot;max&quot;: 20.5, &quot;range&quot;: 15.5, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 7.2, &quot;iqr&quot;: 3.5999999999999996, &quot;q1&quot;: 9.5, &quot;median&quot;: 11.4, &quot;q3&quot;: 13.1, &quot;ninety_fifth_percentile&quot;: 15.7}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.73323560719198, &quot;coefficient_of_variation&quot;: 0.24026332693319094, &quot;sum&quot;: 2275.2, &quot;variance&quot;: 7.470576884422111, &quot;mean&quot;: 11.376}}}, &quot;response.aggregate_reading_level&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 6.0, &quot;end&quot;: 19.0000019, &quot;width&quot;: 0, &quot;counts&quot;: [9, 0, 34, 0, 29, 0, 21, 0, 0, 16, 0, 18, 0, 26, 0, 0, 18, 0, 14, 0, 8, 0, 0, 2, 0, 1, 0, 3, 0, 1], &quot;max&quot;: 19.0, &quot;min&quot;: 6.0, &quot;bins&quot;: [6.0, 6.433333396666667, 6.866666793333334, 7.30000019, 7.733333586666667, 8.166666983333334, 8.60000038, 9.033333776666666, 9.466667173333335, 9.90000057, 10.333333966666668, 10.766667363333333, 11.20000076, 11.633334156666667, 12.066667553333334, 12.50000095, 12.933334346666667, 13.366667743333334, 13.80000114, 14.233334536666668, 14.666667933333335, 15.100001330000001, 15.533334726666668, 15.966668123333335, 16.40000152, 16.833334916666665, 17.266668313333334, 17.700001710000002, 18.133335106666667, 18.566668503333332, 19.0000019], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 7.000000226000953, &quot;min&quot;: 6.0, &quot;max&quot;: 19.0, &quot;range&quot;: 13.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 7.0, &quot;iqr&quot;: 4.0, &quot;q1&quot;: 8.0, &quot;median&quot;: 10.0, &quot;q3&quot;: 12.0, &quot;ninety_fifth_percentile&quot;: 15.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.9002469137651055, &quot;coefficient_of_variation&quot;: 0.28226247335913435, &quot;sum&quot;: 2055.0, &quot;variance&quot;: 8.41143216080402, &quot;mean&quot;: 10.275}}}, &quot;response.syllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 58.0, &quot;end&quot;: 675.0000675, &quot;width&quot;: 0, &quot;counts&quot;: [2, 2, 9, 18, 15, 24, 27, 19, 21, 15, 17, 6, 4, 6, 9, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 675.0, &quot;min&quot;: 58.0, &quot;bins&quot;: [58.0, 78.56666891666667, 99.13333783333334, 119.70000675, 140.26667566666669, 160.83334458333334, 181.4000135, 201.96668241666669, 222.53335133333334, 243.10002025, 263.6666891666667, 284.2333580833333, 304.800027, 325.3666959166667, 345.93336483333337, 366.50003375, 387.0667026666667, 407.63337158333337, 428.2000405, 448.7667094166667, 469.33337833333337, 489.90004725, 510.4667161666667, 531.0333850833333, 551.600054, 572.1667229166667, 592.7333918333334, 613.3000607500001, 633.8667296666667, 654.4333985833333, 675.0000675], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 70.00002416472604, &quot;min&quot;: 58.0, &quot;max&quot;: 675.0, &quot;range&quot;: 617.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 108.0, &quot;iqr&quot;: 96.0, &quot;q1&quot;: 164.0, &quot;median&quot;: 205.0, &quot;q3&quot;: 260.0, &quot;ninety_fifth_percentile&quot;: 363.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 79.18796400474052, &quot;coefficient_of_variation&quot;: 0.3653508224168517, &quot;sum&quot;: 43349.0, &quot;variance&quot;: 6270.733643216081, &quot;mean&quot;: 216.745}}}, &quot;response.lexicon_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 47.0, &quot;end&quot;: 476.0000476, &quot;width&quot;: 0, &quot;counts&quot;: [2, 7, 7, 22, 19, 24, 18, 25, 23, 14, 9, 9, 7, 5, 6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 476.0, &quot;min&quot;: 47.0, &quot;bins&quot;: [47.0, 61.30000158666667, 75.60000317333333, 89.90000476, 104.20000634666667, 118.50000793333334, 132.80000952, 147.10001110666667, 161.40001269333334, 175.70001428, 190.00001586666667, 204.30001745333334, 218.60001904, 232.90002062666667, 247.20002221333334, 261.5000238, 275.8000253866667, 290.10002697333334, 304.40002856, 318.7000301466667, 333.00003173333334, 347.30003332, 361.6000349066667, 375.90003649333335, 390.20003808, 404.5000396666667, 418.80004125333335, 433.10004284, 447.4000444266667, 461.70004601333335, 476.0000476], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 62.50001924734006, &quot;min&quot;: 47.0, &quot;max&quot;: 476.0, &quot;range&quot;: 429.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 78.0, &quot;iqr&quot;: 67.0, &quot;q1&quot;: 113.0, &quot;median&quot;: 150.0, &quot;q3&quot;: 180.0, &quot;ninety_fifth_percentile&quot;: 246.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 53.40919100133502, &quot;coefficient_of_variation&quot;: 0.3521988262147451, &quot;sum&quot;: 30329.000000000004, &quot;variance&quot;: 2852.541683417085, &quot;mean&quot;: 151.645}}}, &quot;response.sentence_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 3.0, &quot;end&quot;: 19.0000019, &quot;width&quot;: 0, &quot;counts&quot;: [5, 20, 0, 26, 0, 37, 0, 29, 0, 22, 0, 23, 0, 14, 7, 0, 6, 0, 5, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1], &quot;max&quot;: 19.0, &quot;min&quot;: 3.0, &quot;bins&quot;: [3.0, 3.5333333966666665, 4.066666793333333, 4.60000019, 5.133333586666667, 5.666666983333333, 6.2000003800000005, 6.733333776666667, 7.2666671733333335, 7.80000057, 8.333333966666666, 8.866667363333335, 9.400000760000001, 9.933334156666668, 10.466667553333334, 11.00000095, 11.533334346666667, 12.066667743333333, 12.60000114, 13.133334536666666, 13.666667933333333, 14.200001330000001, 14.733334726666667, 15.266668123333334, 15.80000152, 16.333334916666665, 16.866668313333335, 17.400001709999998, 17.933335106666668, 18.466668503333334, 19.0000019], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 7.5000002607703316, &quot;min&quot;: 3.0, &quot;max&quot;: 19.0, &quot;range&quot;: 16.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 4.0, &quot;iqr&quot;: 4.0, &quot;q1&quot;: 5.0, &quot;median&quot;: 7.0, &quot;q3&quot;: 9.0, &quot;ninety_fifth_percentile&quot;: 13.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.765722528658223, &quot;coefficient_of_variation&quot;: 0.373493926895101, &quot;sum&quot;: 1481.0, &quot;variance&quot;: 7.649221105527637, &quot;mean&quot;: 7.405}}}, &quot;response.character_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 205.0, &quot;end&quot;: 2237.0002237, &quot;width&quot;: 0, &quot;counts&quot;: [1, 8, 3, 19, 19, 21, 26, 22, 23, 14, 15, 6, 5, 9, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 2237.0, &quot;min&quot;: 205.0, &quot;bins&quot;: [205.0, 272.73334079, 340.46668158, 408.20002237, 475.93336316, 543.66670395, 611.40004474, 679.1333855299999, 746.86672632, 814.60006711, 882.3334079, 950.0667486899999, 1017.80008948, 1085.53343027, 1153.2667710599999, 1221.00011185, 1288.73345264, 1356.46679343, 1424.20013422, 1491.93347501, 1559.6668158, 1627.40015659, 1695.1334973799999, 1762.86683817, 1830.60017896, 1898.33351975, 1966.06686054, 2033.80020133, 2101.5335421199998, 2169.2668829100003, 2237.0002237], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 88.0000382463329, &quot;min&quot;: 205.0, &quot;max&quot;: 2237.0, &quot;range&quot;: 2032.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 362.0, &quot;iqr&quot;: 319.0, &quot;q1&quot;: 546.0, &quot;median&quot;: 690.0, &quot;q3&quot;: 865.0, &quot;ninety_fifth_percentile&quot;: 1152.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 252.53665836685073, &quot;coefficient_of_variation&quot;: 0.35265557654915614, &quot;sum&quot;: 143220.0, &quot;variance&quot;: 63774.763819095475, &quot;mean&quot;: 716.1}}}, &quot;response.letter_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 199.0, &quot;end&quot;: 2170.000217, &quot;width&quot;: 0, &quot;counts&quot;: [1, 8, 3, 19, 19, 20, 26, 23, 22, 13, 17, 5, 6, 8, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 2170.0, &quot;min&quot;: 199.0, &quot;bins&quot;: [199.0, 264.70000723333334, 330.4000144666667, 396.10002169999996, 461.8000289333333, 527.5000361666666, 593.2000433999999, 658.9000506333332, 724.6000578666666, 790.3000650999999, 856.0000723333333, 921.7000795666665, 987.4000867999998, 1053.1000940333333, 1118.8001012666664, 1184.5001085, 1250.2001157333332, 1315.9001229666665, 1381.6001301999997, 1447.3001374333332, 1513.0001446666665, 1578.7001518999998, 1644.400159133333, 1710.1001663666664, 1775.8001735999997, 1841.5001808333332, 1907.2001880666664, 1972.9001952999997, 2038.600202533333, 2104.3002097666663, 2170.000217], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 90.00004000963831, &quot;min&quot;: 199.0, &quot;max&quot;: 2170.0, &quot;range&quot;: 1971.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 353.0, &quot;iqr&quot;: 314.0, &quot;q1&quot;: 528.0, &quot;median&quot;: 667.0, &quot;q3&quot;: 842.0, &quot;ninety_fifth_percentile&quot;: 1121.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 245.2391694369614, &quot;coefficient_of_variation&quot;: 0.35266168068070863, &quot;sum&quot;: 139079.0, &quot;variance&quot;: 60142.25022613065, &quot;mean&quot;: 695.395}}}, &quot;response.polysyllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 51.0000051, &quot;width&quot;: 0, &quot;counts&quot;: [3, 9, 8, 12, 18, 26, 10, 13, 15, 21, 6, 7, 12, 2, 4, 8, 1, 8, 2, 4, 1, 1, 0, 1, 3, 1, 1, 1, 1, 1], &quot;max&quot;: 51.0, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 1.70000017, 3.40000034, 5.10000051, 6.80000068, 8.50000085, 10.20000102, 11.900001190000001, 13.60000136, 15.30000153, 17.0000017, 18.70000187, 20.40000204, 22.10000221, 23.800002380000002, 25.50000255, 27.20000272, 28.90000289, 30.60000306, 32.30000323, 34.0000034, 35.70000357, 37.40000374, 39.10000391, 40.80000408, 42.50000425, 44.20000442, 45.90000459, 47.600004760000004, 49.30000493, 51.0000051], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 21.500002242625033, &quot;min&quot;: 0.0, &quot;max&quot;: 51.0, &quot;range&quot;: 51.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 3.0, &quot;iqr&quot;: 12.0, &quot;q1&quot;: 9.0, &quot;median&quot;: 14.0, &quot;q3&quot;: 21.0, &quot;ninety_fifth_percentile&quot;: 36.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 10.18896338566254, &quot;coefficient_of_variation&quot;: 0.6485654605768644, &quot;sum&quot;: 3142.0, &quot;variance&quot;: 103.81497487437186, &quot;mean&quot;: 15.71}}}, &quot;response.monosyllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 35.0, &quot;end&quot;: 340.000034, &quot;width&quot;: 0, &quot;counts&quot;: [6, 5, 10, 16, 29, 20, 23, 17, 20, 17, 8, 6, 8, 6, 4, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 340.0, &quot;min&quot;: 35.0, &quot;bins&quot;: [35.0, 45.1666678, 55.3333356, 65.5000034, 75.6666712, 85.833339, 96.00000680000001, 106.16667460000001, 116.3333424, 126.5000102, 136.666678, 146.83334580000002, 157.00001360000002, 167.16668140000002, 177.33334920000001, 187.500017, 197.6666848, 207.8333526, 218.0000204, 228.1666882, 238.333356, 248.5000238, 258.66669160000004, 268.8333594, 279.00002720000003, 289.166695, 299.33336280000003, 309.5000306, 319.66669840000003, 329.8333662, 340.000034], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 54.00001434982264, &quot;min&quot;: 35.0, &quot;max&quot;: 340.0, &quot;range&quot;: 305.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 55.0, &quot;iqr&quot;: 51.0, &quot;q1&quot;: 79.0, &quot;median&quot;: 101.0, &quot;q3&quot;: 130.0, &quot;ninety_fifth_percentile&quot;: 176.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 39.89319125543498, &quot;coefficient_of_variation&quot;: 0.3710131714060449, &quot;sum&quot;: 21505.0, &quot;variance&quot;: 1591.4667085427136, &quot;mean&quot;: 107.525}}}, &quot;response.difficult_words&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 3.0, &quot;end&quot;: 79.0000079, &quot;width&quot;: 0, &quot;counts&quot;: [4, 12, 11, 16, 17, 36, 11, 16, 9, 20, 4, 16, 6, 4, 4, 1, 2, 2, 5, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 79.0, &quot;min&quot;: 3.0, &quot;bins&quot;: [3.0, 5.533333596666667, 8.066667193333334, 10.60000079, 13.133334386666666, 15.666667983333333, 18.20000158, 20.733335176666667, 23.266668773333333, 25.800002369999998, 28.333335966666667, 30.866669563333332, 33.40000316, 35.93333675666666, 38.466670353333335, 41.00000395, 43.533337546666665, 46.06667114333333, 48.600004739999996, 51.13333833666667, 53.66667193333333, 56.20000553, 58.733339126666664, 61.26667272333333, 63.800006319999994, 66.33333991666666, 68.86667351333332, 71.40000711, 73.93334070666667, 76.46667430333333, 79.0000079], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 23.500002684692895, &quot;min&quot;: 3.0, &quot;max&quot;: 79.0, &quot;range&quot;: 76.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 8.0, &quot;iqr&quot;: 13.0, &quot;q1&quot;: 15.0, &quot;median&quot;: 20.0, &quot;q3&quot;: 28.0, &quot;ninety_fifth_percentile&quot;: 48.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 12.003599753206363, &quot;coefficient_of_variation&quot;: 0.5371939920880001, &quot;sum&quot;: 4469.0, &quot;variance&quot;: 144.08640703517585, &quot;mean&quot;: 22.345}}}, &quot;response.toxicity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0007439255714416504, &quot;end&quot;: 0.8926833568617105, &quot;width&quot;: 0, &quot;counts&quot;: [195, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 0.8926832675933838, &quot;min&quot;: 0.0007439255714416504, &quot;bins&quot;: [0.0007439255714416504, 0.030475239947783946, 0.06020655432412624, 0.08993786870046853, 0.11966918307681083, 0.14940049745315312, 0.17913181182949542, 0.20886312620583772, 0.23859444058218002, 0.2683257549585223, 0.2980570693348646, 0.3277883837112069, 0.3575196980875492, 0.3872510124638915, 0.4169823268402338, 0.4467136412165761, 0.4764449555929184, 0.5061762699692607, 0.5359075843456029, 0.5656388987219453, 0.5953702130982875, 0.6251015274746299, 0.6548328418509721, 0.6845641562273145, 0.7142954706036567, 0.7440267849799991, 0.7737580993563413, 0.8034894137326837, 0.8332207281090259, 0.8629520424853683, 0.8926833568617105], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 97.50004697593673, &quot;min&quot;: 0.0007439255714416504, &quot;max&quot;: 0.8926832675933838, &quot;range&quot;: 0.8919393420219421, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.0007745027542114258, &quot;iqr&quot;: 0.0003609657287597656, &quot;q1&quot;: 0.0008307695388793945, &quot;median&quot;: 0.0009470582008361816, &quot;q3&quot;: 0.0011917352676391602, &quot;ninety_fifth_percentile&quot;: 0.011335134506225586}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.06415321155768076, &quot;coefficient_of_variation&quot;: 8.284909635413152, &quot;sum&quot;: 1.5486761927604675, &quot;variance&quot;: 0.004115634553164545, &quot;mean&quot;: 0.007743380963802338}}}, &quot;response.has_patterns&quot;: {&quot;histogram&quot;: null, &quot;frequentItems&quot;: [], &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: true, &quot;featureStats&quot;: {&quot;total_count&quot;: 0, &quot;missing&quot;: 200, &quot;distinct&quot;: null, &quot;min&quot;: NaN, &quot;max&quot;: NaN, &quot;range&quot;: NaN, &quot;quantile_statistics&quot;: null, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: null, &quot;coefficient_of_variation&quot;: null, &quot;sum&quot;: null, &quot;variance&quot;: null, &quot;mean&quot;: null}}}, &quot;response.sentiment_nltk&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.9958, &quot;end&quot;: 0.99570009957, &quot;width&quot;: 0, &quot;counts&quot;: [16, 4, 5, 5, 2, 4, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 4, 0, 4, 3, 1, 2, 9, 9, 23, 28, 62], &quot;max&quot;: 0.9957, &quot;min&quot;: -0.9958, &quot;bins&quot;: [-0.9958, -0.9294166633476667, -0.8630333266953334, -0.796649990043, -0.7302666533906667, -0.6638833167383333, -0.5974999800859999, -0.5311166434336666, -0.4647333067813333, -0.398349970129, -0.33196663347666666, -0.26558329682433324, -0.19919996017199992, -0.1328166235196666, -0.06643328686733319, -4.995021499987207e-05, 0.06633338643733344, 0.13271672308966687, 0.19910005974200007, 0.2654833963943335, 0.3318667330466667, 0.3982500696990001, 0.46463340635133354, 0.5310167430036667, 0.5974000796560002, 0.6637834163083336, 0.7301667529606668, 0.7965500896130002, 0.8629334262653336, 0.9293167629176668, 0.9957000995700003], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 97.50004697593673, &quot;min&quot;: -0.9958, &quot;max&quot;: 0.9957, &quot;range&quot;: 1.9915, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.9563, &quot;iqr&quot;: 0.7953, &quot;q1&quot;: 0.154, &quot;median&quot;: 0.8429, &quot;q3&quot;: 0.9493, &quot;ninety_fifth_percentile&quot;: 0.9881}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.6983397307669011, &quot;coefficient_of_variation&quot;: 1.5424587836338182, &quot;sum&quot;: 90.5489, &quot;variance&quot;: 0.4876783795675879, &quot;mean&quot;: 0.4527445}}}, &quot;response.refusal_similarity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.10727085918188095, &quot;end&quot;: 0.3967793384602785, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 5, 6, 13, 14, 19, 18, 19, 23, 20, 15, 11, 7, 7, 2, 3, 4, 2, 1, 2, 0, 0, 1, 0, 0, 0, 3, 1, 1], &quot;max&quot;: 0.39677929878234863, &quot;min&quot;: -0.10727085918188095, &quot;bins&quot;: [-0.10727085918188095, -0.0904691859271423, -0.07366751267240365, -0.056865839417665015, -0.040064166162926365, -0.023262492908187715, -0.006460819653449079, 0.01034085360128957, 0.02714252685602822, 0.04394420011076686, 0.06074587336550552, 0.07754754662024416, 0.09434921987498279, 0.11115089312972146, 0.1279525663844601, 0.14475423963919876, 0.1615559128939374, 0.17835758614867603, 0.19515925940341466, 0.21196093265815336, 0.228762605912892, 0.24556427916763063, 0.26236595242236926, 0.2791676256771079, 0.29596929893184654, 0.3127709721865852, 0.32957264544132386, 0.3463743186960625, 0.36317599195080114, 0.37997766520553977, 0.39677933846027846], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: -0.10727085918188095, &quot;max&quot;: 0.39677929878234863, &quot;range&quot;: 0.5040501579642296, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.04711052030324936, &quot;iqr&quot;: 0.08877978846430779, &quot;q1&quot;: 0.0012208856642246246, &quot;median&quot;: 0.04705806076526642, &quot;q3&quot;: 0.09000067412853241, &quot;ninety_fifth_percentile&quot;: 0.2070692777633667}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08310242696880878, &quot;coefficient_of_variation&quot;: 1.484787405328719, &quot;sum&quot;: 11.193848583381623, &quot;variance&quot;: 0.006906013368106197, &quot;mean&quot;: 0.055969242916908114}}}, &quot;response.refusals_similarity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.10727085918188095, &quot;end&quot;: 0.3967793384602785, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 5, 6, 13, 14, 19, 18, 19, 23, 20, 15, 11, 7, 7, 2, 3, 4, 2, 1, 2, 0, 0, 1, 0, 0, 0, 3, 1, 1], &quot;max&quot;: 0.39677929878234863, &quot;min&quot;: -0.10727085918188095, &quot;bins&quot;: [-0.10727085918188095, -0.0904691859271423, -0.07366751267240365, -0.056865839417665015, -0.040064166162926365, -0.023262492908187715, -0.006460819653449079, 0.01034085360128957, 0.02714252685602822, 0.04394420011076686, 0.06074587336550552, 0.07754754662024416, 0.09434921987498279, 0.11115089312972146, 0.1279525663844601, 0.14475423963919876, 0.1615559128939374, 0.17835758614867603, 0.19515925940341466, 0.21196093265815336, 0.228762605912892, 0.24556427916763063, 0.26236595242236926, 0.2791676256771079, 0.29596929893184654, 0.3127709721865852, 0.32957264544132386, 0.3463743186960625, 0.36317599195080114, 0.37997766520553977, 0.39677933846027846], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: -0.10727085918188095, &quot;max&quot;: 0.39677929878234863, &quot;range&quot;: 0.5040501579642296, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.04711052030324936, &quot;iqr&quot;: 0.08877978846430779, &quot;q1&quot;: 0.0012208856642246246, &quot;median&quot;: 0.04705806076526642, &quot;q3&quot;: 0.09000067412853241, &quot;ninety_fifth_percentile&quot;: 0.2070692777633667}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08310242696880878, &quot;coefficient_of_variation&quot;: 1.484787405328719, &quot;sum&quot;: 11.193848583381623, &quot;variance&quot;: 0.006906013368106197, &quot;mean&quot;: 0.055969242916908114}}}}, &quot;properties&quot;: {&quot;observations&quot;: 5000, &quot;missing_cells&quot;: 200, &quot;missing_percentage&quot;: 4.0}} }\n",
       "    const targetProfile = getTargetProfile()\n",
       "\n",
       "    function fixNumberTo(number, decimals = 3) {\n",
       "      const fractionalDigits = String(number % 1).split(&#x27;&#x27;).slice(2, 2 + decimals).join(&#x27;&#x27;)\n",
       "      return `${Math.trunc(number)}.${fractionalDigits}`\n",
       "    }\n",
       "\n",
       "    function registerHandlebarHelperFunctions() {\n",
       "      //helper fun\n",
       "\n",
       "      class GenerateChartParams {\n",
       "        constructor(height, width, data, bottomMargin=20, topMargin=5) {\n",
       "          this.MARGIN = {\n",
       "            TOP: topMargin,\n",
       "            RIGHT: 5,\n",
       "            BOTTOM: bottomMargin,\n",
       "            LEFT: 55,\n",
       "          };\n",
       "          this.SVG_WIDTH = width;\n",
       "          this.SVG_HEIGHT = height;\n",
       "          this.CHART_WIDTH = this.SVG_WIDTH - this.MARGIN.LEFT - this.MARGIN.RIGHT;\n",
       "          this.CHART_HEIGHT = this.SVG_HEIGHT - this.MARGIN.TOP - this.MARGIN.BOTTOM;\n",
       "          this.svgEl = d3.create(&quot;svg&quot;)\n",
       "             .attr(&quot;preserveAspectRatio&quot;, &quot;xMinYMin meet&quot;)\n",
       "             .attr(&quot;viewBox&quot;, &quot;30 0 240 400&quot;)\n",
       "             .classed(&quot;svg-content-responsive&quot;, true)\n",
       "          this.maxYValue = d3.max(data, (d) =&gt; Math.abs(d.axisY));\n",
       "          this.xScale = d3\n",
       "            .scaleBand()\n",
       "            .domain(data.map((d) =&gt; d.axisX))\n",
       "            .range([this.MARGIN.LEFT, this.MARGIN.LEFT + this.CHART_WIDTH]);\n",
       "          this.yScale = d3\n",
       "            .scaleLinear()\n",
       "            .domain([0, this.maxYValue * 1.02])\n",
       "            .range([this.CHART_HEIGHT, 0]);\n",
       "        }\n",
       "      }\n",
       "\n",
       "      function generateChart(data, height = 70, width = 250, index = 0, referenceProfileExist = false) {\n",
       "        const sizes = new GenerateChartParams(height, width, data, 5)\n",
       "        const {\n",
       "          MARGIN,\n",
       "          SVG_WIDTH,\n",
       "          SVG_HEIGHT,\n",
       "          CHART_WIDTH,\n",
       "          CHART_HEIGHT,\n",
       "          svgEl,\n",
       "          maxYValue,\n",
       "          xScale,\n",
       "          yScale\n",
       "        } = sizes\n",
       "        const rectColors = [&quot;#44C0E7&quot;, &quot;#F5843C&quot;]\n",
       "\n",
       "        // Add the y Axis\n",
       "        if (!referenceProfileExist) {\n",
       "          svgEl\n",
       "            .append(&quot;g&quot;)\n",
       "            .attr(&quot;transform&quot;, &quot;translate(&quot; + MARGIN.LEFT + &quot;, &quot; + MARGIN.TOP + &quot;)&quot;)\n",
       "            .call(d3.axisLeft(yScale).tickValues([0, maxYValue/2, maxYValue]))\n",
       "            .selectAll(&quot;text&quot;)\n",
       "            .style(&quot;font-size&quot;, &quot;8&quot;)\n",
       "        }\n",
       "\n",
       "        const gChart = svgEl.append(&quot;g&quot;);\n",
       "        gChart\n",
       "          .attr(&quot;transform&quot;, &quot;translate(&quot; + 20 + &quot;, &quot; + 0 + &quot;)&quot;)\n",
       "          .selectAll(&quot;.bar&quot;)\n",
       "          .data(data)\n",
       "          .enter()\n",
       "          .append(&quot;rect&quot;)\n",
       "          .classed(&quot;bar&quot;, true)\n",
       "          .attr(&quot;width&quot;, xScale.bandwidth() - 1)\n",
       "          .attr(&quot;height&quot;, (d) =&gt; CHART_HEIGHT - yScale(d.axisY))\n",
       "          .attr(&quot;x&quot;, (d) =&gt; xScale(d.axisX))\n",
       "          .attr(&quot;y&quot;, (d) =&gt; yScale(d.axisY) + MARGIN.TOP)\n",
       "          .attr(&quot;fill&quot;, rectColors[index]);\n",
       "\n",
       "        return svgEl._groups[0][0].outerHTML;\n",
       "      }\n",
       "\n",
       "      function chartData(column) {\n",
       "        const data = [];\n",
       "        if (column.histogram) {\n",
       "          column.histogram.counts.slice(0, 30).forEach((count, index) =&gt; {\n",
       "            data.push({\n",
       "              axisY: count,\n",
       "              axisX: index,\n",
       "            });\n",
       "          });\n",
       "        } else if (column.frequentItems) {\n",
       "          Object.entries(column.frequentItems).forEach(([key, {value, estimate}], index) =&gt; {\n",
       "              data.push({\n",
       "                axisY: estimate,\n",
       "                axisX: value,\n",
       "              });\n",
       "            });\n",
       "        }\n",
       "\n",
       "        return data\n",
       "      }\n",
       "\n",
       "      function graph(column, key, referenceColumn) {\n",
       "        let data = [];\n",
       "        const columnKey = key.data.key\n",
       "        let chartValue = false\n",
       "        let chartColor = undefined\n",
       "        if(!!referenceColumn){\n",
       "          column = referenceColumn.columns[columnKey]\n",
       "          chartValue = true\n",
       "          chartColor = 1\n",
       "        } else if (referenceColumn === undefined) {\n",
       "          column = &quot;&quot;\n",
       "        }\n",
       "\n",
       "        if (column.histogram || column.frequentItems) {\n",
       "          data = chartData(column)\n",
       "        } else if (referenceColumn === null ) {\n",
       "            $(&quot;.svg-container&quot;).css(&quot;padding-bottom&quot;, &quot;0&quot;)\n",
       "            return &#x27;&lt;span class=&quot;wl-table-cell__bedge-wrap&quot;&gt;No data to show the chart&lt;/span&gt;&#x27;;\n",
       "        } else if (referenceColumn === undefined) {\n",
       "            $(document).ready(function() {\n",
       "              $(&quot;.reference-table-head&quot;).addClass(&quot;d-none&quot;)\n",
       "            });\n",
       "            return &#x27;&#x27;\n",
       "        } else if (referenceColumn.frequentItems === undefined){\n",
       "            return &#x27;&#x27;;\n",
       "        }\n",
       "        return `\n",
       "          &lt;div class=&quot;svg-container&quot;&gt;\n",
       "            ${generateChart(data, ...[,,], chartColor, chartValue)}\n",
       "          &lt;/div&gt;\n",
       "        `;\n",
       "      }\n",
       "\n",
       "      function formatLabelDate(timestamp) {\n",
       "        const date = new Date(timestamp);\n",
       "        const format = d3.timeFormat(&quot;%Y-%m-%d %I:%M:%S %p %Z&quot;);\n",
       "        return format(date);\n",
       "      }\n",
       "\n",
       "    abbreviate_number = function(value, fixed = 0) {\n",
       "      value = +value\n",
       "      if (value === null) { return null; } // terminate early\n",
       "      if (value === 0) { return &#x27;0&#x27;; } // terminate early\n",
       "      fixed = (!fixed || fixed &lt; 0) ? 0 : fixed; // number of decimal places to show\n",
       "      var b = (value).toPrecision(2).split(&quot;e&quot;), // get power\n",
       "          k = b.length === 1 ? 0 : Math.floor(Math.min(b[1].slice(1), 14) / 3), // floor at decimals, ceiling at trillions\n",
       "          c = k &lt; 1 ? value.toFixed(0 + fixed) : (value / Math.pow(10, k * 3) ).toFixed(1 + fixed), // divide by power\n",
       "          d = c &lt; 0 ? c : Math.abs(c), // enforce -0 is 0\n",
       "          newValue = d,\n",
       "          suffixe = [&#x27;&#x27;, &#x27;K&#x27;, &#x27;M&#x27;, &#x27;B&#x27;, &#x27;T&#x27;][k]; // append power\n",
       "      return {value, newValue, suffixe};\n",
       "    }\n",
       "\n",
       "     function formatBytes(bytes, decimals = 2) {\n",
       "       let newValue,\n",
       "       suffixe = &quot;&quot;\n",
       "       if (bytes === 0) return &#x27;0 Bytes&#x27;;\n",
       "\n",
       "       const k = 1024;\n",
       "       const dm = decimals &lt; 0 ? 0 : decimals;\n",
       "       const sizes = [&#x27;Bytes&#x27;, &#x27;KiB&#x27;, &#x27;MB&#x27;, &#x27;GB&#x27;, &#x27;TB&#x27;, &#x27;PB&#x27;, &#x27;EB&#x27;, &#x27;ZB&#x27;, &#x27;YB&#x27;];\n",
       "\n",
       "       const i = Math.floor(Math.log(bytes) / Math.log(k));\n",
       "       newValue = parseFloat((bytes / Math.pow(k, i)).toFixed(dm));\n",
       "       suffixe = sizes[i]\n",
       "       return {bytes, newValue, suffixe};\n",
       "     }\n",
       "\n",
       "     const valueSuffixe = (newNumber) =&gt; `\n",
       "       &lt;div class=&quot;statistic-measurement&quot;&gt;\n",
       "        ${newNumber}\n",
       "       &lt;/div&gt;`\n",
       "     const valueNumber = (newNumber) =&gt; `\n",
       "       &lt;div class=&quot;statistic-number&quot;&gt;\n",
       "        ${newNumber}\n",
       "       &lt;/div&gt;`\n",
       "\n",
       "     const numberWithSuffixe = (number, newNumber, suffixe) =&gt;\n",
       "       `&lt;div class=&quot;tooltip-full-number&quot;&gt;\n",
       "          &lt;div class=&quot;statistic-number&quot;&gt;\n",
       "             ${newNumber}\n",
       "            &lt;div class=&quot;statistic-measurement&quot;&gt;${suffixe}&lt;/div&gt;\n",
       "          &lt;/div&gt;\n",
       "          &lt;span class=&quot;tooltiptext&quot;&gt;${number}&lt;/span&gt;\n",
       "        &lt;/div&gt;`\n",
       "\n",
       "     Handlebars.registerHelper(&quot;observations&quot;, function (properties) {\n",
       "       const {value, newValue, suffixe} = abbreviate_number(targetProfile.properties.observations)\n",
       "       return numberWithSuffixe(value, valueNumber(newValue), valueNumber(suffixe));\n",
       "     });\n",
       "\n",
       "     Handlebars.registerHelper(&quot;missingCells&quot;, function (properties) {\n",
       "       const {value, newValue, suffixe} = abbreviate_number(targetProfile.properties.missing_cells)\n",
       "       if (typeof value !== &#x27;undefined&#x27; &amp;&amp; typeof newValue !== &#x27;undefined&#x27;  &amp;&amp; typeof suffixe !== &#x27;undefined&#x27; ) {\n",
       "        return numberWithSuffixe(value, valueSuffixe(`${newValue}`), suffixe);\n",
       "       }\n",
       "       return numberWithSuffixe(0, valueNumber(0), valueNumber(&#x27;&#x27;));\n",
       "     });\n",
       "\n",
       "     Handlebars.registerHelper(&quot;missingCellsPercentage&quot;, function (properties) {\n",
       "       const {value, newValue, suffixe} = abbreviate_number(targetProfile.properties.missing_percentage)\n",
       "       if (typeof value !== &#x27;undefined&#x27; &amp;&amp; typeof newValue !== &#x27;undefined&#x27;  &amp;&amp; typeof suffixe !== &#x27;undefined&#x27; ) {\n",
       "        return numberWithSuffixe(value, valueSuffixe(`(${newValue}%)`), suffixe);\n",
       "       }\n",
       "       return numberWithSuffixe(0, valueSuffixe(`(${0}%)`), &#x27;&#x27;);\n",
       "     });\n",
       "\n",
       "     Handlebars.registerHelper(&quot;getProfileTimeStamp&quot;, function (properties) {\n",
       "       return formatLabelDate(+properties.properties.dataTimestamp)\n",
       "     });\n",
       "\n",
       "     Handlebars.registerHelper(&quot;getProfileName&quot;, function (properties) {\n",
       "       return properties.properties.tags.name\n",
       "     });\n",
       "\n",
       "       const cheqValueTypeNumber = (profile, profileValue) =&gt; {\n",
       "         let validValue;\n",
       "         if (profile &amp;&amp; profileValue !== undefined &amp;&amp; typeof profileValue === &quot;number&quot;) {\n",
       "           return true\n",
       "         } else if (profileValue !== undefined &amp;&amp; typeof profileValue !== &quot;number&quot;) {\n",
       "           return false\n",
       "         }\n",
       "       }\n",
       "\n",
       "\n",
       "      Handlebars.registerHelper(&quot;inferredType&quot;, function (column) {\n",
       "        let infferedType = &quot;&quot;;\n",
       "\n",
       "        if (column.isDiscrete) {\n",
       "          infferedType = &quot;Discrete&quot;;\n",
       "        } else {\n",
       "          infferedType = &quot;Non-discrete&quot;;\n",
       "        }\n",
       "        return infferedType;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;frequentItems&quot;, function (column) {\n",
       "        frequentItemsElemString = &quot;&quot;;\n",
       "        if (column.isDiscrete) {\n",
       "          const slicedFrequentItems = column.frequentItems.items.slice(0, 5);\n",
       "          for (let fi = 0; fi &lt; slicedFrequentItems.length; fi++) {\n",
       "            frequentItemsElemString +=\n",
       "              &#x27;&lt;span class=&quot;wl-table-cell__bedge&quot;&gt;&#x27; + slicedFrequentItems[fi].jsonValue + &quot;&lt;/span&gt;&quot;;\n",
       "          }\n",
       "        } else {\n",
       "          frequentItemsElemString += &quot;No data to show&quot;;\n",
       "        }\n",
       "        return frequentItemsElemString;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;totalCount&quot;, function (column) {\n",
       "        if (column.featureStats) {\n",
       "          return column.featureStats.total_count;\n",
       "        }\n",
       "\n",
       "        return &quot;-&quot;;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;missing&quot;, function (column) {\n",
       "        if (column.featureStats) {\n",
       "          return column.featureStats.missing;\n",
       "        }\n",
       "\n",
       "        return &quot;-&quot;;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;minimumValue&quot;, function (column) {\n",
       "        if (column.featureStats) {\n",
       "          if (isNaN(column.featureStats.min)){return &quot;-&quot;}\n",
       "          return fixNumberTo(column.featureStats.min);\n",
       "        }\n",
       "\n",
       "        return &quot;-&quot;;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;maximumValue&quot;, function (column) {\n",
       "        if (column.featureStats) {\n",
       "          if (isNaN(column.featureStats.max)){return &quot;-&quot;}\n",
       "          return fixNumberTo(column.featureStats.max);\n",
       "        }\n",
       "\n",
       "        return &quot;-&quot;;\n",
       "      });\n",
       "\n",
       "\n",
       "      Handlebars.registerHelper(&quot;mean&quot;, function (column) {\n",
       "        if (column.featureStats?.descriptive_statistics) {\n",
       "          if (isNaN(column.featureStats.descriptive_statistics.mean)){return &quot;-&quot;}\n",
       "          if (column.featureStats.descriptive_statistics.mean==null){return &quot;-&quot;}\n",
       "          return fixNumberTo(column.featureStats.descriptive_statistics.mean);\n",
       "        }\n",
       "        return &quot;-&quot;;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;getGraphHtml&quot;,(column,key) =&gt; graph(column, key, null));\n",
       "\n",
       "      Handlebars.registerHelper(&quot;getDiscreteTypeCount&quot;, function () {\n",
       "        let count = 0;\n",
       "\n",
       "        Object.entries(this.columns).forEach((feature) =&gt; {\n",
       "          if (feature[1].isDiscrete === true) {\n",
       "            count++;\n",
       "          }\n",
       "        });\n",
       "        return count.toString();\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;getNonDiscreteTypeCount&quot;, function () {\n",
       "        let count = 0;\n",
       "\n",
       "        Object.entries(this.columns).forEach((feature) =&gt; {\n",
       "          if (feature[1].isDiscrete === false) {\n",
       "            count++;\n",
       "          }\n",
       "        });\n",
       "        return count;\n",
       "      });\n",
       "\n",
       "      Handlebars.registerHelper(&quot;getUnknownTypeCount&quot;, function () {\n",
       "        let count = 0;\n",
       "        return count;\n",
       "        Object.entries(this.columns).forEach((feature) =&gt; {\n",
       "          if (!feature[1].isDiscrete) {\n",
       "            count++;\n",
       "          }\n",
       "        });\n",
       "        return count;\n",
       "      });\n",
       "    }\n",
       "\n",
       "    function initHandlebarsTemplate() {\n",
       "      // Replace this context with JSON from .py file\n",
       "      const context = {&quot;columns&quot;: {&quot;id&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 1.0, &quot;end&quot;: 200.00002, &quot;width&quot;: 0, &quot;counts&quot;: [7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7], &quot;max&quot;: 200.0, &quot;min&quot;: 1.0, &quot;bins&quot;: [1.0, 7.6333340000000005, 14.266668000000001, 20.900002, 27.533336000000002, 34.16667, 40.800004, 47.433338000000006, 54.066672000000004, 60.700006, 67.33334, 73.96667400000001, 80.600008, 87.23334200000001, 93.86667600000001, 100.50001, 107.13334400000001, 113.76667800000001, 120.400012, 127.03334600000001, 133.66668, 140.300014, 146.93334800000002, 153.56668200000001, 160.200016, 166.83335000000002, 173.46668400000001, 180.100018, 186.73335200000002, 193.36668600000002, 200.00002], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: 1.0, &quot;max&quot;: 200.0, &quot;range&quot;: 199.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 11.0, &quot;iqr&quot;: 100.0, &quot;q1&quot;: 51.0, &quot;median&quot;: 101.0, &quot;q3&quot;: 151.0, &quot;ninety_fifth_percentile&quot;: 191.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 57.879184513951124, &quot;coefficient_of_variation&quot;: 0.5759122837209067, &quot;sum&quot;: 20100.0, &quot;variance&quot;: 3350.0, &quot;mean&quot;: 100.5}}}, &quot;response&quot;: {&quot;histogram&quot;: null, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: null, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: NaN, &quot;max&quot;: NaN, &quot;range&quot;: NaN, &quot;quantile_statistics&quot;: null, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: null, &quot;coefficient_of_variation&quot;: null, &quot;sum&quot;: null, &quot;variance&quot;: null, &quot;mean&quot;: null}}}, &quot;rouge-l-f&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.10937499758300784, &quot;end&quot;: 0.40000003507199955, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 1, 0, 4, 5, 4, 4, 1, 10, 10, 10, 13, 14, 23, 13, 21, 15, 13, 8, 10, 7, 4, 0, 2, 3, 1, 1, 1, 1], &quot;max&quot;: 0.399999995072, &quot;min&quot;: 0.10937499758300784, &quot;bins&quot;: [0.10937499758300784, 0.11906249883264089, 0.12875000008227394, 0.13843750133190702, 0.14812500258154007, 0.15781250383117312, 0.16750000508080617, 0.17718750633043923, 0.1868750075800723, 0.19656250882970533, 0.2062500100793384, 0.21593751132897146, 0.2256250125786045, 0.23531251382823756, 0.24500001507787064, 0.2546875163275037, 0.2643750175771368, 0.2740625188267698, 0.2837500200764028, 0.29343752132603595, 0.303125022575669, 0.312812523825302, 0.3225000250749351, 0.33218752632456816, 0.3418750275742012, 0.35156252882383426, 0.3612500300734673, 0.37093753132310037, 0.38062503257273345, 0.39031253382236647, 0.40000003507199955], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 99.50004892799049, &quot;min&quot;: 0.10937499758300784, &quot;max&quot;: 0.399999995072, &quot;range&quot;: 0.2906249974889922, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.1666666626899094, &quot;iqr&quot;: 0.058608057279977616, &quot;q1&quot;: 0.22710622347810924, &quot;median&quot;: 0.2556390937961446, &quot;q3&quot;: 0.28571428075808686, &quot;ninety_fifth_percentile&quot;: 0.3304347784438563}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.048629821419078456, &quot;coefficient_of_variation&quot;: 0.19075638080642082, &quot;sum&quot;: 50.98631166464402, &quot;variance&quot;: 0.0023648595312514616, &quot;mean&quot;: 0.2549315583232201}}}, &quot;rouge-l-p&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.06363636363636363, &quot;end&quot;: 0.520000052, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 2, 6, 3, 6, 14, 7, 13, 20, 11, 20, 18, 14, 6, 17, 5, 4, 4, 5, 7, 4, 5, 0, 3, 2, 1, 1, 0, 1], &quot;max&quot;: 0.52, &quot;min&quot;: 0.06363636363636363, &quot;bins&quot;: [0.06363636363636363, 0.07884848658181817, 0.09406060952727271, 0.10927273247272727, 0.12448485541818181, 0.13969697836363637, 0.1549091013090909, 0.17012122425454546, 0.1853333472, 0.20054547014545454, 0.21575759309090908, 0.23096971603636363, 0.2461818389818182, 0.2613939619272727, 0.2766060848727273, 0.2918182078181818, 0.3070303307636364, 0.3222424537090909, 0.3374545766545455, 0.35266669959999997, 0.36787882254545456, 0.38309094549090905, 0.39830306843636365, 0.41351519138181814, 0.42872731432727273, 0.44393943727272733, 0.4591515602181818, 0.4743636831636364, 0.4895758061090909, 0.5047879290545455, 0.520000052], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 88.0000382463329, &quot;min&quot;: 0.06363636363636363, &quot;max&quot;: 0.52, &quot;range&quot;: 0.4563636363636364, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.13580246913580246, &quot;iqr&quot;: 0.09999999999999998, &quot;q1&quot;: 0.2, &quot;median&quot;: 0.24242424242424243, &quot;q3&quot;: 0.3, &quot;ninety_fifth_percentile&quot;: 0.41025641025641024}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08323988432940421, &quot;coefficient_of_variation&quot;: 0.32828700116146936, &quot;sum&quot;: 50.71165415316723, &quot;variance&quot;: 0.006928878343172593, &quot;mean&quot;: 0.25355827076583615}}}, &quot;rouge-l-r&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.12560386473429952, &quot;end&quot;: 0.6341464048780487, &quot;width&quot;: 0, &quot;counts&quot;: [1, 7, 9, 10, 9, 17, 12, 17, 12, 16, 14, 15, 14, 10, 7, 5, 5, 1, 2, 4, 4, 0, 3, 0, 1, 1, 2, 1, 0, 1], &quot;max&quot;: 0.6341463414634146, &quot;min&quot;: 0.12560386473429952, &quot;bins&quot;: [0.12560386473429952, 0.14255528273909115, 0.1595067007438828, 0.17645811874867445, 0.1934095367534661, 0.21036095475825772, 0.2273123727630494, 0.24426379076784102, 0.26121520877263266, 0.2781666267774243, 0.2951180447822159, 0.3120694627870076, 0.32902088079179925, 0.34597229879659086, 0.3629237168013825, 0.37987513480617413, 0.3968265528109658, 0.41377797081575746, 0.43072938882054906, 0.4476808068253407, 0.46463222483013233, 0.481583642834924, 0.49853506083971566, 0.5154864788445073, 0.5324378968492989, 0.5493893148540906, 0.5663407328588822, 0.5832921508636739, 0.6002435688684655, 0.6171949868732571, 0.6341464048780487], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 85.50003609808057, &quot;min&quot;: 0.12560386473429952, &quot;max&quot;: 0.6341463414634146, &quot;range&quot;: 0.5085424767291151, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.16666666666666666, &quot;iqr&quot;: 0.11722099039172212, &quot;q1&quot;: 0.22424242424242424, &quot;median&quot;: 0.2857142857142857, &quot;q3&quot;: 0.34146341463414637, &quot;ninety_fifth_percentile&quot;: 0.4722222222222222}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.09511942261797329, &quot;coefficient_of_variation&quot;: 0.3226784719727463, &quot;sum&quot;: 58.95616279353595, &quot;variance&quot;: 0.009047704559176608, &quot;mean&quot;: 0.29478081396767974}}}, &quot;rouge-2-f&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.13953489386695483, &quot;width&quot;: 0, &quot;counts&quot;: [9, 7, 13, 12, 6, 14, 12, 14, 16, 18, 8, 18, 15, 2, 9, 7, 4, 4, 2, 0, 3, 1, 2, 0, 1, 1, 1, 0, 0, 1], &quot;max&quot;: 0.13953487991346683, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.004651163128898494, 0.009302326257796988, 0.013953489386695482, 0.018604652515593977, 0.023255815644492472, 0.027906978773390965, 0.03255814190228946, 0.03720930503118795, 0.04186046816008645, 0.046511631288984945, 0.051162794417883434, 0.05581395754678193, 0.060465120675680425, 0.06511628380457891, 0.06976744693347742, 0.0744186100623759, 0.0790697731912744, 0.0837209363201729, 0.08837209944907139, 0.09302326257796989, 0.09767442570686838, 0.10232558883576687, 0.10697675196466537, 0.11162791509356386, 0.11627907822246235, 0.12093024135136085, 0.12558140448025934, 0.13023256760915783, 0.13488373073805632, 0.13953489386695483], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 96.00004553797348, &quot;min&quot;: 0.0, &quot;max&quot;: 0.13953487991346683, &quot;range&quot;: 0.13953487991346683, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.0065359431449474445, &quot;iqr&quot;: 0.032851359090955344, &quot;q1&quot;: 0.024291493205921375, &quot;median&quot;: 0.041025636395003805, &quot;q3&quot;: 0.05714285229687672, &quot;ninety_fifth_percentile&quot;: 0.0952380910004537}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.025897218102317775, &quot;coefficient_of_variation&quot;: 0.6081464018246296, &quot;sum&quot;: 8.516770969825032, &quot;variance&quot;: 0.0006706659054390154, &quot;mean&quot;: 0.04258385484912516}}}, &quot;rouge-2-p&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.14529915982905983, &quot;width&quot;: 0, &quot;counts&quot;: [9, 12, 13, 12, 12, 12, 15, 9, 9, 20, 16, 10, 9, 5, 8, 3, 4, 4, 2, 5, 3, 3, 0, 1, 1, 0, 0, 1, 1, 1], &quot;max&quot;: 0.1452991452991453, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.004843305327635328, 0.009686610655270655, 0.014529915982905983, 0.01937322131054131, 0.02421652663817664, 0.029059831965811966, 0.033903137293447294, 0.03874644262108262, 0.04358974794871795, 0.04843305327635328, 0.053276358603988605, 0.05811966393162393, 0.06296296925925926, 0.06780627458689459, 0.07264957991452992, 0.07749288524216524, 0.08233619056980057, 0.0871794958974359, 0.09202280122507123, 0.09686610655270655, 0.10170941188034188, 0.10655271720797721, 0.11139602253561254, 0.11623932786324787, 0.1210826331908832, 0.12592593851851852, 0.13076924384615385, 0.13561254917378918, 0.1404558545014245, 0.14529915982905983], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 82.50003360213428, &quot;min&quot;: 0.0, &quot;max&quot;: 0.1452991452991453, &quot;range&quot;: 0.1452991452991453, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.005649717514124294, &quot;iqr&quot;: 0.03852122824520564, &quot;q1&quot;: 0.020618556701030927, &quot;median&quot;: 0.043478260869565216, &quot;q3&quot;: 0.05913978494623656, &quot;ninety_fifth_percentile&quot;: 0.0990990990990991}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.02918286181092049, &quot;coefficient_of_variation&quot;: 0.6701311470667567, &quot;sum&quot;: 8.709597200087574, &quot;variance&quot;: 0.0008516394234752816, &quot;mean&quot;: 0.04354798600043787}}}, &quot;rouge-2-r&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 0.2777778055555556, &quot;width&quot;: 0, &quot;counts&quot;: [13, 21, 23, 24, 21, 27, 16, 17, 10, 7, 5, 3, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 2], &quot;max&quot;: 0.2777777777777778, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 0.009259260185185187, 0.018518520370370373, 0.027777780555555562, 0.03703704074074075, 0.04629630092592593, 0.055555561111111124, 0.0648148212962963, 0.0740740814814815, 0.08333334166666669, 0.09259260185185186, 0.10185186203703706, 0.11111112222222225, 0.12037038240740743, 0.1296296425925926, 0.1388889027777778, 0.148148162962963, 0.15740742314814818, 0.16666668333333337, 0.17592594351851853, 0.18518520370370373, 0.19444446388888892, 0.2037037240740741, 0.2129629842592593, 0.2222222444444445, 0.23148150462962966, 0.24074076481481485, 0.250000025, 0.2592592851851852, 0.2685185453703704, 0.2777778055555556], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 85.50003609808057, &quot;min&quot;: 0.0, &quot;max&quot;: 0.2777777777777778, &quot;range&quot;: 0.2777777777777778, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.006802721088435374, &quot;iqr&quot;: 0.0434931506849315, &quot;q1&quot;: 0.025, &quot;median&quot;: 0.045454545454545456, &quot;q3&quot;: 0.0684931506849315, &quot;ninety_fifth_percentile&quot;: 0.11764705882352941}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.04436871041903559, &quot;coefficient_of_variation&quot;: 0.8405242900236517, &quot;sum&quot;: 10.55738922614291, &quot;variance&quot;: 0.0019685824642482375, &quot;mean&quot;: 0.052786946130714545}}}, &quot;response.relevance_to_prompt&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.3410143256187439, &quot;end&quot;: 0.9024633475591004, &quot;width&quot;: 0, &quot;counts&quot;: [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 6, 5, 7, 13, 10, 19, 24, 13, 24, 23, 19, 10, 8, 5], &quot;max&quot;: 0.9024632573127747, &quot;min&quot;: 0.3410143256187439, &quot;bins&quot;: [0.3410143256187439, 0.35972929301675577, 0.37844426041476764, 0.39715922781277957, 0.41587419521079144, 0.4345891626088033, 0.4533041300068152, 0.47201909740482706, 0.490734064802839, 0.5094490322008508, 0.5281639995988627, 0.5468789669968745, 0.5655939343948865, 0.5843089017928984, 0.6030238691909102, 0.6217388365889222, 0.6404538039869341, 0.6591687713849459, 0.6778837387829577, 0.6965987061809698, 0.7153136735789816, 0.7340286409769934, 0.7527436083750053, 0.7714585757730172, 0.7901735431710291, 0.808888510569041, 0.8276034779670529, 0.8463184453650647, 0.8650334127630767, 0.8837483801610885, 0.9024633475591004], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: 0.3410143256187439, &quot;max&quot;: 0.9024632573127747, &quot;range&quot;: 0.5614489316940308, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.6181663274765015, &quot;iqr&quot;: 0.09734678268432617, &quot;q1&quot;: 0.7255511283874512, &quot;median&quot;: 0.7735737562179565, &quot;q3&quot;: 0.8228979110717773, &quot;ninety_fifth_percentile&quot;: 0.8705755472183228}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.0859011698636574, &quot;coefficient_of_variation&quot;: 0.11257606621133481, &quot;sum&quot;: 152.6100045144558, &quot;variance&quot;: 0.007379010983944921, &quot;mean&quot;: 0.7630500225722789}}}, &quot;response.flesch_reading_ease&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 9.38, &quot;end&quot;: 93.340009334, &quot;width&quot;: 0, &quot;counts&quot;: [1, 0, 0, 0, 1, 1, 0, 0, 4, 0, 4, 5, 3, 5, 10, 9, 7, 14, 20, 21, 5, 17, 20, 10, 19, 13, 4, 4, 1, 2], &quot;max&quot;: 93.34, &quot;min&quot;: 9.38, &quot;bins&quot;: [9.38, 12.1786669778, 14.977333955600002, 17.776000933400002, 20.574667911200002, 23.373334889000002, 26.172001866800002, 28.970668844600006, 31.769335822400002, 34.568002800200006, 37.366669778, 40.165336755800006, 42.96400373360001, 45.762670711400006, 48.56133768920001, 51.360004667000005, 54.15867164480001, 56.95733862260001, 59.75600560040001, 62.55467257820001, 65.35333955600001, 68.1520065338, 70.9506735116, 73.7493404894, 76.54800746720001, 79.346674445, 82.1453414228, 84.94400840060001, 87.74267537840001, 90.5413423562, 93.340009334], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 87.00003737958137, &quot;min&quot;: 9.38, &quot;max&quot;: 93.34, &quot;range&quot;: 83.96000000000001, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 39.77, &quot;iqr&quot;: 17.22, &quot;q1&quot;: 57.61, &quot;median&quot;: 64.64, &quot;q3&quot;: 74.83, &quot;ninety_fifth_percentile&quot;: 83.36}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 13.75281971416961, &quot;coefficient_of_variation&quot;: 0.21340530803464697, &quot;sum&quot;: 12888.919999999998, &quot;variance&quot;: 189.14005009045226, &quot;mean&quot;: 64.4446}}}, &quot;response.automated_readability_index&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 5.0, &quot;end&quot;: 20.50000205, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 3, 2, 5, 5, 17, 7, 15, 14, 11, 13, 18, 18, 15, 8, 11, 10, 6, 4, 6, 1, 0, 0, 3, 3, 0, 0, 1, 1], &quot;max&quot;: 20.5, &quot;min&quot;: 5.0, &quot;bins&quot;: [5.0, 5.516666735, 6.03333347, 6.550000205, 7.066666939999999, 7.5833336749999996, 8.10000041, 8.616667145, 9.133333879999999, 9.650000615, 10.166667349999999, 10.683334084999998, 11.20000082, 11.716667554999999, 12.233334289999998, 12.750001025, 13.266667759999999, 13.783334494999998, 14.30000123, 14.816667964999999, 15.333334699999998, 15.850001435, 16.366668169999997, 16.883334904999998, 17.40000164, 17.916668375, 18.433335109999998, 18.950001844999996, 19.466668579999997, 19.983335314999998, 20.50000205], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 42.00000865757673, &quot;min&quot;: 5.0, &quot;max&quot;: 20.5, &quot;range&quot;: 15.5, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 7.2, &quot;iqr&quot;: 3.5999999999999996, &quot;q1&quot;: 9.5, &quot;median&quot;: 11.4, &quot;q3&quot;: 13.1, &quot;ninety_fifth_percentile&quot;: 15.7}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.73323560719198, &quot;coefficient_of_variation&quot;: 0.24026332693319094, &quot;sum&quot;: 2275.2, &quot;variance&quot;: 7.470576884422111, &quot;mean&quot;: 11.376}}}, &quot;response.aggregate_reading_level&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 6.0, &quot;end&quot;: 19.0000019, &quot;width&quot;: 0, &quot;counts&quot;: [9, 0, 34, 0, 29, 0, 21, 0, 0, 16, 0, 18, 0, 26, 0, 0, 18, 0, 14, 0, 8, 0, 0, 2, 0, 1, 0, 3, 0, 1], &quot;max&quot;: 19.0, &quot;min&quot;: 6.0, &quot;bins&quot;: [6.0, 6.433333396666667, 6.866666793333334, 7.30000019, 7.733333586666667, 8.166666983333334, 8.60000038, 9.033333776666666, 9.466667173333335, 9.90000057, 10.333333966666668, 10.766667363333333, 11.20000076, 11.633334156666667, 12.066667553333334, 12.50000095, 12.933334346666667, 13.366667743333334, 13.80000114, 14.233334536666668, 14.666667933333335, 15.100001330000001, 15.533334726666668, 15.966668123333335, 16.40000152, 16.833334916666665, 17.266668313333334, 17.700001710000002, 18.133335106666667, 18.566668503333332, 19.0000019], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 7.000000226000953, &quot;min&quot;: 6.0, &quot;max&quot;: 19.0, &quot;range&quot;: 13.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 7.0, &quot;iqr&quot;: 4.0, &quot;q1&quot;: 8.0, &quot;median&quot;: 10.0, &quot;q3&quot;: 12.0, &quot;ninety_fifth_percentile&quot;: 15.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.9002469137651055, &quot;coefficient_of_variation&quot;: 0.28226247335913435, &quot;sum&quot;: 2055.0, &quot;variance&quot;: 8.41143216080402, &quot;mean&quot;: 10.275}}}, &quot;response.syllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 58.0, &quot;end&quot;: 675.0000675, &quot;width&quot;: 0, &quot;counts&quot;: [2, 2, 9, 18, 15, 24, 27, 19, 21, 15, 17, 6, 4, 6, 9, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 675.0, &quot;min&quot;: 58.0, &quot;bins&quot;: [58.0, 78.56666891666667, 99.13333783333334, 119.70000675, 140.26667566666669, 160.83334458333334, 181.4000135, 201.96668241666669, 222.53335133333334, 243.10002025, 263.6666891666667, 284.2333580833333, 304.800027, 325.3666959166667, 345.93336483333337, 366.50003375, 387.0667026666667, 407.63337158333337, 428.2000405, 448.7667094166667, 469.33337833333337, 489.90004725, 510.4667161666667, 531.0333850833333, 551.600054, 572.1667229166667, 592.7333918333334, 613.3000607500001, 633.8667296666667, 654.4333985833333, 675.0000675], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 70.00002416472604, &quot;min&quot;: 58.0, &quot;max&quot;: 675.0, &quot;range&quot;: 617.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 108.0, &quot;iqr&quot;: 96.0, &quot;q1&quot;: 164.0, &quot;median&quot;: 205.0, &quot;q3&quot;: 260.0, &quot;ninety_fifth_percentile&quot;: 363.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 79.18796400474052, &quot;coefficient_of_variation&quot;: 0.3653508224168517, &quot;sum&quot;: 43349.0, &quot;variance&quot;: 6270.733643216081, &quot;mean&quot;: 216.745}}}, &quot;response.lexicon_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 47.0, &quot;end&quot;: 476.0000476, &quot;width&quot;: 0, &quot;counts&quot;: [2, 7, 7, 22, 19, 24, 18, 25, 23, 14, 9, 9, 7, 5, 6, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 476.0, &quot;min&quot;: 47.0, &quot;bins&quot;: [47.0, 61.30000158666667, 75.60000317333333, 89.90000476, 104.20000634666667, 118.50000793333334, 132.80000952, 147.10001110666667, 161.40001269333334, 175.70001428, 190.00001586666667, 204.30001745333334, 218.60001904, 232.90002062666667, 247.20002221333334, 261.5000238, 275.8000253866667, 290.10002697333334, 304.40002856, 318.7000301466667, 333.00003173333334, 347.30003332, 361.6000349066667, 375.90003649333335, 390.20003808, 404.5000396666667, 418.80004125333335, 433.10004284, 447.4000444266667, 461.70004601333335, 476.0000476], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 62.50001924734006, &quot;min&quot;: 47.0, &quot;max&quot;: 476.0, &quot;range&quot;: 429.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 78.0, &quot;iqr&quot;: 67.0, &quot;q1&quot;: 113.0, &quot;median&quot;: 150.0, &quot;q3&quot;: 180.0, &quot;ninety_fifth_percentile&quot;: 246.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 53.40919100133502, &quot;coefficient_of_variation&quot;: 0.3521988262147451, &quot;sum&quot;: 30329.000000000004, &quot;variance&quot;: 2852.541683417085, &quot;mean&quot;: 151.645}}}, &quot;response.sentence_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 3.0, &quot;end&quot;: 19.0000019, &quot;width&quot;: 0, &quot;counts&quot;: [5, 20, 0, 26, 0, 37, 0, 29, 0, 22, 0, 23, 0, 14, 7, 0, 6, 0, 5, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1], &quot;max&quot;: 19.0, &quot;min&quot;: 3.0, &quot;bins&quot;: [3.0, 3.5333333966666665, 4.066666793333333, 4.60000019, 5.133333586666667, 5.666666983333333, 6.2000003800000005, 6.733333776666667, 7.2666671733333335, 7.80000057, 8.333333966666666, 8.866667363333335, 9.400000760000001, 9.933334156666668, 10.466667553333334, 11.00000095, 11.533334346666667, 12.066667743333333, 12.60000114, 13.133334536666666, 13.666667933333333, 14.200001330000001, 14.733334726666667, 15.266668123333334, 15.80000152, 16.333334916666665, 16.866668313333335, 17.400001709999998, 17.933335106666668, 18.466668503333334, 19.0000019], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 7.5000002607703316, &quot;min&quot;: 3.0, &quot;max&quot;: 19.0, &quot;range&quot;: 16.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 4.0, &quot;iqr&quot;: 4.0, &quot;q1&quot;: 5.0, &quot;median&quot;: 7.0, &quot;q3&quot;: 9.0, &quot;ninety_fifth_percentile&quot;: 13.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 2.765722528658223, &quot;coefficient_of_variation&quot;: 0.373493926895101, &quot;sum&quot;: 1481.0, &quot;variance&quot;: 7.649221105527637, &quot;mean&quot;: 7.405}}}, &quot;response.character_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 205.0, &quot;end&quot;: 2237.0002237, &quot;width&quot;: 0, &quot;counts&quot;: [1, 8, 3, 19, 19, 21, 26, 22, 23, 14, 15, 6, 5, 9, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 2237.0, &quot;min&quot;: 205.0, &quot;bins&quot;: [205.0, 272.73334079, 340.46668158, 408.20002237, 475.93336316, 543.66670395, 611.40004474, 679.1333855299999, 746.86672632, 814.60006711, 882.3334079, 950.0667486899999, 1017.80008948, 1085.53343027, 1153.2667710599999, 1221.00011185, 1288.73345264, 1356.46679343, 1424.20013422, 1491.93347501, 1559.6668158, 1627.40015659, 1695.1334973799999, 1762.86683817, 1830.60017896, 1898.33351975, 1966.06686054, 2033.80020133, 2101.5335421199998, 2169.2668829100003, 2237.0002237], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 88.0000382463329, &quot;min&quot;: 205.0, &quot;max&quot;: 2237.0, &quot;range&quot;: 2032.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 362.0, &quot;iqr&quot;: 319.0, &quot;q1&quot;: 546.0, &quot;median&quot;: 690.0, &quot;q3&quot;: 865.0, &quot;ninety_fifth_percentile&quot;: 1152.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 252.53665836685073, &quot;coefficient_of_variation&quot;: 0.35265557654915614, &quot;sum&quot;: 143220.0, &quot;variance&quot;: 63774.763819095475, &quot;mean&quot;: 716.1}}}, &quot;response.letter_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 199.0, &quot;end&quot;: 2170.000217, &quot;width&quot;: 0, &quot;counts&quot;: [1, 8, 3, 19, 19, 20, 26, 23, 22, 13, 17, 5, 6, 8, 5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 2170.0, &quot;min&quot;: 199.0, &quot;bins&quot;: [199.0, 264.70000723333334, 330.4000144666667, 396.10002169999996, 461.8000289333333, 527.5000361666666, 593.2000433999999, 658.9000506333332, 724.6000578666666, 790.3000650999999, 856.0000723333333, 921.7000795666665, 987.4000867999998, 1053.1000940333333, 1118.8001012666664, 1184.5001085, 1250.2001157333332, 1315.9001229666665, 1381.6001301999997, 1447.3001374333332, 1513.0001446666665, 1578.7001518999998, 1644.400159133333, 1710.1001663666664, 1775.8001735999997, 1841.5001808333332, 1907.2001880666664, 1972.9001952999997, 2038.600202533333, 2104.3002097666663, 2170.000217], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 90.00004000963831, &quot;min&quot;: 199.0, &quot;max&quot;: 2170.0, &quot;range&quot;: 1971.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 353.0, &quot;iqr&quot;: 314.0, &quot;q1&quot;: 528.0, &quot;median&quot;: 667.0, &quot;q3&quot;: 842.0, &quot;ninety_fifth_percentile&quot;: 1121.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 245.2391694369614, &quot;coefficient_of_variation&quot;: 0.35266168068070863, &quot;sum&quot;: 139079.0, &quot;variance&quot;: 60142.25022613065, &quot;mean&quot;: 695.395}}}, &quot;response.polysyllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0, &quot;end&quot;: 51.0000051, &quot;width&quot;: 0, &quot;counts&quot;: [3, 9, 8, 12, 18, 26, 10, 13, 15, 21, 6, 7, 12, 2, 4, 8, 1, 8, 2, 4, 1, 1, 0, 1, 3, 1, 1, 1, 1, 1], &quot;max&quot;: 51.0, &quot;min&quot;: 0.0, &quot;bins&quot;: [0.0, 1.70000017, 3.40000034, 5.10000051, 6.80000068, 8.50000085, 10.20000102, 11.900001190000001, 13.60000136, 15.30000153, 17.0000017, 18.70000187, 20.40000204, 22.10000221, 23.800002380000002, 25.50000255, 27.20000272, 28.90000289, 30.60000306, 32.30000323, 34.0000034, 35.70000357, 37.40000374, 39.10000391, 40.80000408, 42.50000425, 44.20000442, 45.90000459, 47.600004760000004, 49.30000493, 51.0000051], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 21.500002242625033, &quot;min&quot;: 0.0, &quot;max&quot;: 51.0, &quot;range&quot;: 51.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 3.0, &quot;iqr&quot;: 12.0, &quot;q1&quot;: 9.0, &quot;median&quot;: 14.0, &quot;q3&quot;: 21.0, &quot;ninety_fifth_percentile&quot;: 36.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 10.18896338566254, &quot;coefficient_of_variation&quot;: 0.6485654605768644, &quot;sum&quot;: 3142.0, &quot;variance&quot;: 103.81497487437186, &quot;mean&quot;: 15.71}}}, &quot;response.monosyllable_count&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 35.0, &quot;end&quot;: 340.000034, &quot;width&quot;: 0, &quot;counts&quot;: [6, 5, 10, 16, 29, 20, 23, 17, 20, 17, 8, 6, 8, 6, 4, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 340.0, &quot;min&quot;: 35.0, &quot;bins&quot;: [35.0, 45.1666678, 55.3333356, 65.5000034, 75.6666712, 85.833339, 96.00000680000001, 106.16667460000001, 116.3333424, 126.5000102, 136.666678, 146.83334580000002, 157.00001360000002, 167.16668140000002, 177.33334920000001, 187.500017, 197.6666848, 207.8333526, 218.0000204, 228.1666882, 238.333356, 248.5000238, 258.66669160000004, 268.8333594, 279.00002720000003, 289.166695, 299.33336280000003, 309.5000306, 319.66669840000003, 329.8333662, 340.000034], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 54.00001434982264, &quot;min&quot;: 35.0, &quot;max&quot;: 340.0, &quot;range&quot;: 305.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 55.0, &quot;iqr&quot;: 51.0, &quot;q1&quot;: 79.0, &quot;median&quot;: 101.0, &quot;q3&quot;: 130.0, &quot;ninety_fifth_percentile&quot;: 176.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 39.89319125543498, &quot;coefficient_of_variation&quot;: 0.3710131714060449, &quot;sum&quot;: 21505.0, &quot;variance&quot;: 1591.4667085427136, &quot;mean&quot;: 107.525}}}, &quot;response.difficult_words&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 3.0, &quot;end&quot;: 79.0000079, &quot;width&quot;: 0, &quot;counts&quot;: [4, 12, 11, 16, 17, 36, 11, 16, 9, 20, 4, 16, 6, 4, 4, 1, 2, 2, 5, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 79.0, &quot;min&quot;: 3.0, &quot;bins&quot;: [3.0, 5.533333596666667, 8.066667193333334, 10.60000079, 13.133334386666666, 15.666667983333333, 18.20000158, 20.733335176666667, 23.266668773333333, 25.800002369999998, 28.333335966666667, 30.866669563333332, 33.40000316, 35.93333675666666, 38.466670353333335, 41.00000395, 43.533337546666665, 46.06667114333333, 48.600004739999996, 51.13333833666667, 53.66667193333333, 56.20000553, 58.733339126666664, 61.26667272333333, 63.800006319999994, 66.33333991666666, 68.86667351333332, 71.40000711, 73.93334070666667, 76.46667430333333, 79.0000079], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 23.500002684692895, &quot;min&quot;: 3.0, &quot;max&quot;: 79.0, &quot;range&quot;: 76.0, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 8.0, &quot;iqr&quot;: 13.0, &quot;q1&quot;: 15.0, &quot;median&quot;: 20.0, &quot;q3&quot;: 28.0, &quot;ninety_fifth_percentile&quot;: 48.0}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 12.003599753206363, &quot;coefficient_of_variation&quot;: 0.5371939920880001, &quot;sum&quot;: 4469.0, &quot;variance&quot;: 144.08640703517585, &quot;mean&quot;: 22.345}}}, &quot;response.toxicity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: 0.0007439255714416504, &quot;end&quot;: 0.8926833568617105, &quot;width&quot;: 0, &quot;counts&quot;: [195, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], &quot;max&quot;: 0.8926832675933838, &quot;min&quot;: 0.0007439255714416504, &quot;bins&quot;: [0.0007439255714416504, 0.030475239947783946, 0.06020655432412624, 0.08993786870046853, 0.11966918307681083, 0.14940049745315312, 0.17913181182949542, 0.20886312620583772, 0.23859444058218002, 0.2683257549585223, 0.2980570693348646, 0.3277883837112069, 0.3575196980875492, 0.3872510124638915, 0.4169823268402338, 0.4467136412165761, 0.4764449555929184, 0.5061762699692607, 0.5359075843456029, 0.5656388987219453, 0.5953702130982875, 0.6251015274746299, 0.6548328418509721, 0.6845641562273145, 0.7142954706036567, 0.7440267849799991, 0.7737580993563413, 0.8034894137326837, 0.8332207281090259, 0.8629520424853683, 0.8926833568617105], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 97.50004697593673, &quot;min&quot;: 0.0007439255714416504, &quot;max&quot;: 0.8926832675933838, &quot;range&quot;: 0.8919393420219421, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: 0.0007745027542114258, &quot;iqr&quot;: 0.0003609657287597656, &quot;q1&quot;: 0.0008307695388793945, &quot;median&quot;: 0.0009470582008361816, &quot;q3&quot;: 0.0011917352676391602, &quot;ninety_fifth_percentile&quot;: 0.011335134506225586}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.06415321155768076, &quot;coefficient_of_variation&quot;: 8.284909635413152, &quot;sum&quot;: 1.5486761927604675, &quot;variance&quot;: 0.004115634553164545, &quot;mean&quot;: 0.007743380963802338}}}, &quot;response.has_patterns&quot;: {&quot;histogram&quot;: null, &quot;frequentItems&quot;: [], &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: true, &quot;featureStats&quot;: {&quot;total_count&quot;: 0, &quot;missing&quot;: 200, &quot;distinct&quot;: null, &quot;min&quot;: NaN, &quot;max&quot;: NaN, &quot;range&quot;: NaN, &quot;quantile_statistics&quot;: null, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: null, &quot;coefficient_of_variation&quot;: null, &quot;sum&quot;: null, &quot;variance&quot;: null, &quot;mean&quot;: null}}}, &quot;response.sentiment_nltk&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.9958, &quot;end&quot;: 0.99570009957, &quot;width&quot;: 0, &quot;counts&quot;: [16, 4, 5, 5, 2, 4, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 3, 4, 0, 4, 3, 1, 2, 9, 9, 23, 28, 62], &quot;max&quot;: 0.9957, &quot;min&quot;: -0.9958, &quot;bins&quot;: [-0.9958, -0.9294166633476667, -0.8630333266953334, -0.796649990043, -0.7302666533906667, -0.6638833167383333, -0.5974999800859999, -0.5311166434336666, -0.4647333067813333, -0.398349970129, -0.33196663347666666, -0.26558329682433324, -0.19919996017199992, -0.1328166235196666, -0.06643328686733319, -4.995021499987207e-05, 0.06633338643733344, 0.13271672308966687, 0.19910005974200007, 0.2654833963943335, 0.3318667330466667, 0.3982500696990001, 0.46463340635133354, 0.5310167430036667, 0.5974000796560002, 0.6637834163083336, 0.7301667529606668, 0.7965500896130002, 0.8629334262653336, 0.9293167629176668, 0.9957000995700003], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 97.50004697593673, &quot;min&quot;: -0.9958, &quot;max&quot;: 0.9957, &quot;range&quot;: 1.9915, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.9563, &quot;iqr&quot;: 0.7953, &quot;q1&quot;: 0.154, &quot;median&quot;: 0.8429, &quot;q3&quot;: 0.9493, &quot;ninety_fifth_percentile&quot;: 0.9881}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.6983397307669011, &quot;coefficient_of_variation&quot;: 1.5424587836338182, &quot;sum&quot;: 90.5489, &quot;variance&quot;: 0.4876783795675879, &quot;mean&quot;: 0.4527445}}}, &quot;response.refusal_similarity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.10727085918188095, &quot;end&quot;: 0.3967793384602785, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 5, 6, 13, 14, 19, 18, 19, 23, 20, 15, 11, 7, 7, 2, 3, 4, 2, 1, 2, 0, 0, 1, 0, 0, 0, 3, 1, 1], &quot;max&quot;: 0.39677929878234863, &quot;min&quot;: -0.10727085918188095, &quot;bins&quot;: [-0.10727085918188095, -0.0904691859271423, -0.07366751267240365, -0.056865839417665015, -0.040064166162926365, -0.023262492908187715, -0.006460819653449079, 0.01034085360128957, 0.02714252685602822, 0.04394420011076686, 0.06074587336550552, 0.07754754662024416, 0.09434921987498279, 0.11115089312972146, 0.1279525663844601, 0.14475423963919876, 0.1615559128939374, 0.17835758614867603, 0.19515925940341466, 0.21196093265815336, 0.228762605912892, 0.24556427916763063, 0.26236595242236926, 0.2791676256771079, 0.29596929893184654, 0.3127709721865852, 0.32957264544132386, 0.3463743186960625, 0.36317599195080114, 0.37997766520553977, 0.39677933846027846], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: -0.10727085918188095, &quot;max&quot;: 0.39677929878234863, &quot;range&quot;: 0.5040501579642296, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.04711052030324936, &quot;iqr&quot;: 0.08877978846430779, &quot;q1&quot;: 0.0012208856642246246, &quot;median&quot;: 0.04705806076526642, &quot;q3&quot;: 0.09000067412853241, &quot;ninety_fifth_percentile&quot;: 0.2070692777633667}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08310242696880878, &quot;coefficient_of_variation&quot;: 1.484787405328719, &quot;sum&quot;: 11.193848583381623, &quot;variance&quot;: 0.006906013368106197, &quot;mean&quot;: 0.055969242916908114}}}, &quot;response.refusals_similarity&quot;: {&quot;histogram&quot;: {&quot;start&quot;: -0.10727085918188095, &quot;end&quot;: 0.3967793384602785, &quot;width&quot;: 0, &quot;counts&quot;: [2, 1, 5, 6, 13, 14, 19, 18, 19, 23, 20, 15, 11, 7, 7, 2, 3, 4, 2, 1, 2, 0, 0, 1, 0, 0, 0, 3, 1, 1], &quot;max&quot;: 0.39677929878234863, &quot;min&quot;: -0.10727085918188095, &quot;bins&quot;: [-0.10727085918188095, -0.0904691859271423, -0.07366751267240365, -0.056865839417665015, -0.040064166162926365, -0.023262492908187715, -0.006460819653449079, 0.01034085360128957, 0.02714252685602822, 0.04394420011076686, 0.06074587336550552, 0.07754754662024416, 0.09434921987498279, 0.11115089312972146, 0.1279525663844601, 0.14475423963919876, 0.1615559128939374, 0.17835758614867603, 0.19515925940341466, 0.21196093265815336, 0.228762605912892, 0.24556427916763063, 0.26236595242236926, 0.2791676256771079, 0.29596929893184654, 0.3127709721865852, 0.32957264544132386, 0.3463743186960625, 0.36317599195080114, 0.37997766520553977, 0.39677933846027846], &quot;n&quot;: 200}, &quot;frequentItems&quot;: null, &quot;drift_from_ref&quot;: null, &quot;isDiscrete&quot;: false, &quot;featureStats&quot;: {&quot;total_count&quot;: 200, &quot;missing&quot;: 0, &quot;distinct&quot;: 100.00004942221274, &quot;min&quot;: -0.10727085918188095, &quot;max&quot;: 0.39677929878234863, &quot;range&quot;: 0.5040501579642296, &quot;quantile_statistics&quot;: {&quot;fifth_percentile&quot;: -0.04711052030324936, &quot;iqr&quot;: 0.08877978846430779, &quot;q1&quot;: 0.0012208856642246246, &quot;median&quot;: 0.04705806076526642, &quot;q3&quot;: 0.09000067412853241, &quot;ninety_fifth_percentile&quot;: 0.2070692777633667}, &quot;descriptive_statistics&quot;: {&quot;stddev&quot;: 0.08310242696880878, &quot;coefficient_of_variation&quot;: 1.484787405328719, &quot;sum&quot;: 11.193848583381623, &quot;variance&quot;: 0.006906013368106197, &quot;mean&quot;: 0.055969242916908114}}}}, &quot;properties&quot;: {&quot;observations&quot;: 5000, &quot;missing_cells&quot;: 200, &quot;missing_percentage&quot;: 4.0}};\n",
       "      // Config handlebars and pass data to HBS template\n",
       "      const source = document.getElementById(&quot;entry-template&quot;).innerHTML;\n",
       "      const template = Handlebars.compile(source);\n",
       "      const html = template(context);\n",
       "      const target = document.getElementById(&quot;generated-html&quot;);\n",
       "      target.innerHTML = html;\n",
       "    }\n",
       "\n",
       "    function initWebsiteScripts() {\n",
       "      const $featureSearch = document.getElementById(&quot;wl__feature-search&quot;);\n",
       "      const $tableBody = document.getElementById(&quot;table-body&quot;);\n",
       "      const $discrete = document.getElementById(&quot;inferredDiscrete&quot;);\n",
       "      const $nonDiscrete = document.getElementById(&quot;inferredNonDiscrete&quot;);\n",
       "      const $unknown = document.getElementById(&quot;inferredUnknown&quot;);\n",
       "\n",
       "      const activeTypes = {\n",
       "        discrete: true,\n",
       "        &quot;non-discrete&quot;: true,\n",
       "        unknown: true,\n",
       "      };\n",
       "\n",
       "      let searchString = &quot;&quot;;\n",
       "\n",
       "      function debounce(func, wait, immediate) {\n",
       "        let timeout;\n",
       "\n",
       "        return function () {\n",
       "          const context = this;\n",
       "          const args = arguments;\n",
       "          const later = function () {\n",
       "            timeout = null;\n",
       "            if (!immediate) func.apply(context, args);\n",
       "          };\n",
       "\n",
       "          const callNow = immediate &amp;&amp; !timeout;\n",
       "          clearTimeout(timeout);\n",
       "          timeout = setTimeout(later, wait);\n",
       "          if (callNow) func.apply(context, args);\n",
       "        };\n",
       "      }\n",
       "\n",
       "      function filterNotification() {\n",
       "        const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
       "        const $boxes = $(&#x27;.wl_filter-options&gt;.form-check&gt;input[name=checkbox]:checked&#x27;);\n",
       "        const item = Object.values($boxes).find(function(value) { return $(value)[0] === undefined});\n",
       "        if (item === undefined) {\n",
       "          $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
       "        } else {\n",
       "          $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
       "        }\n",
       "      }\n",
       "\n",
       "      function handleSearch() {\n",
       "        const tableBodyChildren = $tableBody.children;\n",
       "\n",
       "        for (let i = 0; i &lt; tableBodyChildren.length; i++) {\n",
       "          const type = tableBodyChildren[i].dataset.inferredType.toLowerCase();\n",
       "          const name = tableBodyChildren[i].dataset.featureName.toLowerCase();\n",
       "\n",
       "          if (activeTypes[type] &amp;&amp; name.startsWith(searchString)) {\n",
       "            tableBodyChildren[i].style.display = &quot;&quot;;\n",
       "          } else {\n",
       "            tableBodyChildren[i].style.display = &quot;none&quot;;\n",
       "          }\n",
       "        }\n",
       "      }\n",
       "\n",
       "      $featureSearch.addEventListener(\n",
       "        &quot;keyup&quot;,\n",
       "        debounce((event) =&gt; {\n",
       "          searchString = event.target.value.toLowerCase();\n",
       "          handleSearch();\n",
       "        }, 100),\n",
       "      );\n",
       "\n",
       "      $discrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
       "        if (event.currentTarget.checked) {\n",
       "          activeTypes[&quot;discrete&quot;] = true;\n",
       "        } else {\n",
       "          activeTypes[&quot;discrete&quot;] = false;\n",
       "        }\n",
       "        handleSearch();\n",
       "        filterNotification()\n",
       "      });\n",
       "\n",
       "      $nonDiscrete.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
       "        if (event.currentTarget.checked) {\n",
       "          activeTypes[&quot;non-discrete&quot;] = true;\n",
       "        } else {\n",
       "          activeTypes[&quot;non-discrete&quot;] = false;\n",
       "        }\n",
       "        handleSearch();\n",
       "        filterNotification()\n",
       "      });\n",
       "\n",
       "      $unknown.addEventListener(&quot;change&quot;, (event) =&gt; {\n",
       "        if (event.currentTarget.checked) {\n",
       "          activeTypes[&quot;unknown&quot;] = true;\n",
       "        } else {\n",
       "          activeTypes[&quot;unknown&quot;] = false;\n",
       "        }\n",
       "        handleSearch();\n",
       "        filterNotification()\n",
       "      });\n",
       "\n",
       "\n",
       "      $(&quot;.svg-container&quot;).css(&quot;padding-bottom&quot;, &quot;27%&quot;)\n",
       "    }\n",
       "\n",
       "    function checkedBoxes() {\n",
       "      const $boxes = $(&#x27;input[name=checkbox]:checked&#x27;);\n",
       "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
       "\n",
       "      if ($boxes.length) {\n",
       "        $notifCircleContainer.removeClass(&quot;d-none&quot;)\n",
       "      }\n",
       "    }\n",
       "\n",
       "    function openFilter() {\n",
       "      const $filterOptions = $(&quot;.dropdown-container&quot;);\n",
       "      const $notifCircleContainer = $(&quot;.notif-circle-container&quot;)\n",
       "      const filterClass = $filterOptions.attr(&quot;class&quot;);\n",
       "\n",
       "      if (filterClass.indexOf(&quot;d-none&quot;) &gt; 0) {\n",
       "        $notifCircleContainer.addClass(&quot;d-none&quot;)\n",
       "        $filterOptions.removeClass(&quot;d-none&quot;);\n",
       "        $(&quot;.filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
       "        $(&quot;.close-filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
       "      } else {\n",
       "        $filterOptions.addClass(&quot;d-none&quot;);\n",
       "        $(&quot;.close-filter-icon&quot;).addClass(&quot;d-none&quot;)\n",
       "        $(&quot;.filter-icon&quot;).removeClass(&quot;d-none&quot;)\n",
       "        checkedBoxes()\n",
       "      }\n",
       "    }\n",
       "\n",
       "    // Invoke functions -- keep in mind invokation order\n",
       "    registerHandlebarHelperFunctions();\n",
       "    initHandlebarsTemplate();\n",
       "    initWebsiteScripts();\n",
       "  &lt;/script&gt;\n",
       "&lt;/html&gt;\n",
       "\" width=100% height=1000px\n",
       "        frameBorder=0></iframe>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from whylogs.viz import NotebookProfileVisualizer\n",
    "\n",
    "visualization = NotebookProfileVisualizer()\n",
    "visualization.set_profiles(target_profile_view=profile)\n",
    "\n",
    "visualization.profile_summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Monitoring Across Time\n",
    "\n",
    "Now that we defined the metrics we want to track, we need to wrap them all into a single profile and proceed to upload them to our monitoring dashboard. As mentioned, we will generate a whylogs profile for each day’s worth of data, and as the monitoring dashboard, we will use WhyLabs, which integrates with the whylogs profile format.\n",
    "\n",
    "### ✔️ Setting the Environment Variables\n",
    "\n",
    "In order to send our profile to WhyLabs, let's first set up an account. You can skip this if you already have an account and a model set up.\n",
    "\n",
    "We will need three pieces of information:\n",
    "\n",
    "- API token\n",
    "- Organization ID\n",
    "- Dataset ID (or model-id)\n",
    "\n",
    "Go to https://whylabs.ai/free and grab a free account. You can follow along with the examples if you wish, but if you’re interested in only following this demonstration, you can go ahead and skip the quick start instructions.\n",
    "\n",
    "After that, you’ll be prompted to create an API token. Once you create it, copy and store it locally. The second important information here is your org ID. Take note of it as well. After you get your API Token and Org ID, you can go to https://hub.whylabsapp.com/models to see your projects dashboard. You can create a new project and take note of it's ID (if it's a model project it will look like `model-xxxx`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langkit.config import check_or_prompt_for_api_keys\n",
    "\n",
    "check_or_prompt_for_api_keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tagging performance metrics\n",
    "\n",
    "There are some metrics that we'd like to give a special treatment to. Let's set all the `rouge` metrics and the gender bias score as performance metrics, so we can visualize them in the `performance` tab of our WhyLabs dashboard. Let's track the mean across the 200 samples for each day."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from whylogs.api.writer.whylabs import WhyLabsWriter\n",
    "writer = WhyLabsWriter()\n",
    "\n",
    "metric_column_names = {\"rouge-l-f\":\"mean\",\n",
    "                       \"rouge-l-p\":\"mean\",\n",
    "                       \"rouge-l-r\":\"mean\",\n",
    "                       \"rouge-2-f\":\"mean\",\n",
    "                       \"rouge-2-p\":\"mean\",\n",
    "                       \"rouge-2-r\":\"mean\",\n",
    "                       \"gender_tvd\":\"mean\"}\n",
    "\n",
    "for key in metric_column_names:\n",
    "    writer.tag_custom_performance_column(column=key, label=key, default_metric=metric_column_names[key])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we're set to repeat the logging process we did previously for all 35 days. We will create a new profile for each day, and send it to WhyLabs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing Profile to WhyLabs for date:  2023-03-05 00:00:00\n",
      "(True, 'log-KlcuY0iDa6TvKLDd')\n",
      "Writing Profile to WhyLabs for date:  2023-03-06 00:00:00\n",
      "(True, 'log-dl4J8OKYb5Q71CVY')\n",
      "Writing Profile to WhyLabs for date:  2023-03-07 00:00:00\n",
      "(True, 'log-wJVbtqJVT0Lr0MV1')\n",
      "Writing Profile to WhyLabs for date:  2023-03-08 00:00:00\n",
      "(True, 'log-qiuSy5mU2sjwr9jK')\n",
      "Writing Profile to WhyLabs for date:  2023-03-09 00:00:00\n",
      "(True, 'log-xqAgKgTzewtzlpaL')\n",
      "Writing Profile to WhyLabs for date:  2023-03-10 00:00:00\n",
      "(True, 'log-fzTDSVgPsznpxzhi')\n",
      "Writing Profile to WhyLabs for date:  2023-03-11 00:00:00\n",
      "(True, 'log-5exF9EQMyloFSZ3i')\n",
      "Writing Profile to WhyLabs for date:  2023-03-12 00:00:00\n",
      "(True, 'log-w5lwG06lbewSKD7O')\n",
      "Writing Profile to WhyLabs for date:  2023-03-13 00:00:00\n",
      "(True, 'log-Oz1yozRd37lO099I')\n",
      "Writing Profile to WhyLabs for date:  2023-03-14 00:00:00\n",
      "(True, 'log-QLDZd7NSHH28CppZ')\n",
      "Writing Profile to WhyLabs for date:  2023-03-15 00:00:00\n",
      "(True, 'log-qjEa8QwsceSUDqAY')\n",
      "Writing Profile to WhyLabs for date:  2023-03-17 00:00:00\n",
      "(True, 'log-uT39ubc9nRVGk89a')\n",
      "Writing Profile to WhyLabs for date:  2023-03-18 00:00:00\n",
      "(True, 'log-WmawQHN6dil1Imk7')\n",
      "Writing Profile to WhyLabs for date:  2023-03-19 00:00:00\n",
      "(True, 'log-74LjzLJ7XA1NWxhI')\n",
      "Writing Profile to WhyLabs for date:  2023-03-20 00:00:00\n",
      "(True, 'log-CjE0shRBNSVYLODK')\n",
      "Writing Profile to WhyLabs for date:  2023-03-21 00:00:00\n",
      "(True, 'log-rApXAabeT4E5N5VY')\n",
      "Writing Profile to WhyLabs for date:  2023-03-22 00:00:00\n",
      "(True, 'log-52BHJ6CanLpAu9D5')\n",
      "Writing Profile to WhyLabs for date:  2023-03-23 00:00:00\n",
      "(True, 'log-Y247h4jOJQrBKmC8')\n",
      "Writing Profile to WhyLabs for date:  2023-03-24 00:00:00\n",
      "(True, 'log-yVvOPKFZEJ4vROxO')\n",
      "Writing Profile to WhyLabs for date:  2023-03-25 00:00:00\n",
      "(True, 'log-pKcHIJhLDwKwl4d1')\n",
      "Writing Profile to WhyLabs for date:  2023-03-26 00:00:00\n",
      "(True, 'log-S2JuuSVmJm46n9v6')\n",
      "Writing Profile to WhyLabs for date:  2023-03-27 00:00:00\n",
      "(True, 'log-5rVNt8xHsjHVz25a')\n",
      "Writing Profile to WhyLabs for date:  2023-03-28 00:00:00\n",
      "(True, 'log-3B1RZh0soFh3rRaq')\n",
      "Writing Profile to WhyLabs for date:  2023-03-29 00:00:00\n",
      "(True, 'log-ZN0bJrvJYKfI3zCb')\n",
      "Writing Profile to WhyLabs for date:  2023-03-30 00:00:00\n",
      "(True, 'log-BkJIjlSpC5Fnskg6')\n",
      "Writing Profile to WhyLabs for date:  2023-03-31 00:00:00\n",
      "(True, 'log-PQqwbdaML8fOiFiX')\n",
      "Writing Profile to WhyLabs for date:  2023-04-01 00:00:00\n",
      "(True, 'log-EX6t4bRgl8bdZjb4')\n",
      "Writing Profile to WhyLabs for date:  2023-04-02 00:00:00\n",
      "(True, 'log-XbyjYfiqi7gSc2zY')\n",
      "Writing Profile to WhyLabs for date:  2023-04-03 00:00:00\n",
      "(True, 'log-gyzNrbKeZXCBlnzi')\n",
      "Writing Profile to WhyLabs for date:  2023-04-04 00:00:00\n",
      "(True, 'log-HvIcHSf2nA2OSU6W')\n",
      "Writing Profile to WhyLabs for date:  2023-04-05 00:00:00\n",
      "(True, 'log-x7bo5jKa4ZIpcQRj')\n",
      "Writing Profile to WhyLabs for date:  2023-04-06 00:00:00\n",
      "(True, 'log-wzCOh20b4y66k6IG')\n",
      "Writing Profile to WhyLabs for date:  2023-04-07 00:00:00\n",
      "(True, 'log-JX6P7pD9iJBJryaR')\n",
      "Writing Profile to WhyLabs for date:  2023-04-08 00:00:00\n",
      "(True, 'log-4nJ7KSkJRVBCIO8U')\n",
      "Writing Profile to WhyLabs for date:  2023-04-09 00:00:00\n",
      "(True, 'log-u39J5dBloeoNSZ3I')\n",
      "Done Writing!\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import datetime\n",
    "from datetime import timezone\n",
    "\n",
    "starting_date = datetime.datetime(2023, 3, 5)\n",
    "ending_date = datetime.datetime(2023, 4, 9)\n",
    "base_url = \"https://whylabs-public.s3.us-west-2.amazonaws.com/langkit-examples/behavior-llm/\"\n",
    "\n",
    "for day in pd.date_range(starting_date, ending_date):\n",
    "    date_str = day.strftime(\"%Y-%m-%d\")\n",
    "    url = f\"{base_url}daily_{date_str}.csv\"\n",
    "    try:\n",
    "        df = pd.read_csv(url)\n",
    "    except:\n",
    "        continue\n",
    "    \n",
    "    df = rouge_calculation(df)\n",
    "    tvd_score = calc_gender_bias(df)\n",
    "    df, _ = schema.apply_udfs(df)\n",
    "\n",
    "    df = df.drop(columns=[\"prompt\",\"chat_date\", \"ref_0\",\"ref_1\",\"ref_2\"])\n",
    "\n",
    "    profile = why.log(df,schema=schema).profile()\n",
    "    profile.track({\"gender_tvd\":tvd_score})\n",
    "\n",
    "    tzaware_date = day.replace(tzinfo = timezone.utc)\n",
    "    profile.set_dataset_timestamp(tzaware_date)\n",
    "\n",
    "    print(\"Writing Profile to WhyLabs for date: \", day)\n",
    "    status = writer.write(profile)\n",
    "    print(status)\n",
    "\n",
    "print(\"Done Writing!\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## So, Has it Changed?\n",
    "\n",
    "There you have it, you should have your dashboard populated with the daily profiles!\n",
    "\n",
    "As mentioned, you can check a demo dashboard with the same results at [WhyLabs](https://hub.whylabsapp.com/resources/demo-chatgpt-behavior-ELI5/columns/response.difficult_words?dateRange=2023-03-05-to-2023-04-09&targetOrgId=demo&sessionToken=session-8gcsnbVy) (no sign-in required).\n",
    "\n",
    "We have a brief discussion on the results in the blog post [Behavioral Monitoring of Large Language Models](placeholder) that accompanies this example. But we encourage you to explore the results yourself and draw your own conclusions!"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "langkit-vSL8Mxyz-py3.8",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
